Jak działa Modulus Divison

105

Naprawdę nie rozumiem, jak działa podział modułu. Kalkulowałem 27 % 16i skończyłem 11i nie rozumiem dlaczego.

Nie mogę znaleźć wyjaśnienia w terminach laika w Internecie. Czy ktoś może rozwinąć na bardzo wysokim poziomie, co się tutaj dzieje?

NSWOA
źródło

Odpowiedzi:

107

Wynikiem dzielenia modulo jest reszta z dzielenia liczb całkowitych podanych liczb.

To znaczy:

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11

Inne przykłady:

30 / 3 = 10, remainder 0
=> 30 mod 3 = 0

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
Lew
źródło
66
proszę, nie odbierajcie tego źle, ale wasze przykłady nie wyjaśniają niczego dla kogoś, kto nie ma absolutnie żadnego pojęcia, co się dzieje z modulous divison. Pominąłeś bardzo ważne kroki, które wyjaśniają, skąd pochodzi ta pozostałość. Poniższa odpowiedź Marcina M. lepiej wyjaśniła ten proces. Prosimy o rozważenie bardziej szczegółowych odpowiedzi w przyszłości dla tych z nas, którzy mogą w ogóle nie rozumieć koncepcji. Dziękuję jednak, że jesteś członkiem wspierającym społeczność! Ludzie tacy jak Ty pomagają mi i nadal pomagają mi w mojej podróży edukacyjnej :)
Soundfx4
Niezależnie od Wikipedii, moduł i reszta to nie to samo. Niektóre języki mają jeden, inne, niektóre oba, a niektóre nieokreślone.
Markiz Lorne
156

W większości wyjaśnień brakuje jednego ważnego kroku, wypełnijmy lukę innym przykładem.

Biorąc pod uwagę następujące kwestie:

Dividend: 16
Divisor: 6

Funkcja modułu wygląda następująco:

16 % 6 = 4

Ustalmy, dlaczego tak jest.

Najpierw wykonaj dzielenie liczb całkowitych , które jest podobne do zwykłego dzielenia, z wyjątkiem tego, że każda liczba ułamkowa (inaczej reszta) jest odrzucana:

16 / 6 = 2

Następnie pomnóż wynik powyższego dzielenia ( 2) przez nasz dzielnik ( 6):

2 * 6 = 12

Na koniec odejmij wynik powyższego mnożenia ( 12) od naszej dywidendy ( 16):

16 - 12 = 4

Wynik tego odejmowania, 4The pozostała , jest taki sam wynik naszego modułu powyżej!

Marcin M. Jessa
źródło
1
Jak uzyskać 2 z 16/6, a nie 2,6666666667? Czy zawsze powinieneś ignorować 0, ...? Czemu?
Luc
3
@Luc Jak wspominają Leo i ytpillai, używamy dzielenia liczb całkowitych (gdzie ułamkowa część wyniku po podzieleniu jest odrzucana). W Pythonie 3: 16 // 6 >>> 2i16 / 6 >>> 2.6666666666666665
bryik
30

Może przykład z zegarem pomoże ci zrozumieć modulo.

Znanym zastosowaniem arytmetyki modularnej jest jej użycie w zegarze 12-godzinnym, w którym dzień jest podzielony na dwa okresy 12-godzinne.

Powiedzmy, że obecnie mamy godzinę: 15:00,
ale można też powiedzieć, że jest godzina piętnasta

Dokładnie to robi modulo:

15 / 12 = 1, remainder 3

Ten przykład można lepiej wyjaśnić na Wikipedii: Artykuł w Wikipedii Modulo

Prine
źródło
29

Prosty wzór na obliczenie modułu to: -

[Dividend-{(Dividend/Divisor)*Divisor}]

A więc 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

Odpowiedź = 11

Uwaga :

Wszystkie obliczenia dotyczą liczb całkowitych. W przypadku ilorazu dziesiętnego część po przecinku ma zostać zignorowana / obcięta.

np .: 27/16 = 1,6875 należy przyjmować jako 1 w powyższym wzorze. 0.6875 jest ignorowane.

Kompilatory języków komputerowych również traktują liczbę całkowitą z częścią dziesiętną w ten sam sposób (obcinając po przecinku)

Code_Jamer
źródło
A co z 3% 7?
eaglei 22
Więc to byłoby po prostu 3?
eaglei 22
15

Operator modułu pobiera instrukcję dzielenia i zwraca to, co zostało z tego obliczenia, „pozostałe” dane, że tak powiem, takie jak 13/5 = 2. Co oznacza, że ​​pozostały 3 lub pozostałe z tego obliczenia. Czemu? ponieważ 2 * 5 = 10. Zatem 13 - 10 = 3.

Operator modułu wykonuje wszystkie obliczenia za Ciebie, 13% 5 = 3.

RebelPhoenix
źródło
Myślę, że ta odpowiedź najlepiej wyjaśnia to z koncepcyjnego punktu widzenia. Inne odpowiedzi wyjaśniają matematycznie, co jest również konieczne, ale to lepiej pomaga mi zrozumieć, jak mogę zastosować operator modulo.
JonnyB
7

dzielenie modułu jest po prostu takie: podziel dwie liczby i zwróć tylko resztę

27/16 = 1 z 11 pozostało, zatem 27% 16 = 11

tak samo 43/16 = 2 z 11 pozostało, więc 43% 16 = 11 też

chris
źródło
6

Bardzo proste: a % bdefiniuje się jako pozostałą część podziału aprzez b.

Więcej przykładów znajdziesz w artykule na Wikipedii .

Yuval Adam
źródło
5

Chciałbym dodać jeszcze jedną rzecz:

łatwo jest obliczyć modulo, gdy dywidenda jest większa / większa niż dzielnik

dywidenda = 5 dzielnik = 3

5% 3 = 2

3)5(1
  3
-----
  2

ale co, jeśli dzielnik jest mniejszy niż dywidenda

dywidenda = 3 dzielnik = 5

3% 5 = 3 ?? w jaki sposób

Dzieje się tak, ponieważ ponieważ 5 nie może bezpośrednio podzielić 3, to modulo będzie tym, czym jest dywidenda

bn00d
źródło
3

Mam nadzieję, że te proste kroki pomogą:

20 % 3 = 2 
  1. 20 / 3 = 6; nie uwzględniaj .6667- po prostu je zignoruj
  2. 3 * 6 = 18
  3. 20 - 18 = 2, która jest pozostałą częścią modulo
mustafe
źródło
Czy mógłbyś lepiej sformatować tę odpowiedź?
Code Maverick
Sprawdź odpowiedź Code Jammera.
Ajmal Salim
2

Łatwiej, gdy liczba po przecinku (0.xxx) jest krótka. Następnie wszystko, co musisz zrobić, to pomnożyć tę liczbę przez liczbę po podzieleniu.

Dawny: 32 % 12 = 8

Robisz 32/12=2.666666667 Następnie odrzucasz to 2i skupiasz się na 0.666666667 0.666666667*12=8<- To twoja odpowiedź.

(znowu, łatwe tylko wtedy, gdy liczba po przecinku jest krótka)

Gc220
źródło
1

Dzielenie modułu daje resztę z dzielenia, a nie iloraz.

samoz
źródło
1

Powiedzmy, że masz 17 mod 6.

co w sumie 6 da ci najbliżej 17, to będzie 12, ponieważ jeśli przekroczysz 12, będziesz miał 18, czyli więcej niż pytanie o 17 mod 6. Wtedy weźmiesz 12 i minus z 17, co da ci Twoja odpowiedź, w tym przypadku 5.

17 mod 6 = 5

Chad Finch
źródło
1

Podział modułu jest dość prosty. Wykorzystuje resztę zamiast ilorazu.

    1.0833... <-- Quotient
   __
12|13
   12
    1 <-- Remainder
    1.00 <-- Remainder can be used to find decimal values
     .96
     .040
     .036
     .0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...

13/12 = 1R1, ergo 13% 12 = 1.


Pomyśl o module jako o „cyklu”.

Innymi słowy, dla wyrażenia n % 12wynik będzie zawsze <12.

Oznacza to, że sekwencja dla zestawu 0..100dla n % 12to:

{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}

W tym świetle moduł, a także jego zastosowania, stają się znacznie jaśniejsze.

Braden Best
źródło
1

Jedyną ważną rzeczą do zrozumienia jest to, że moduł (oznaczany tutaj przez%, jak w C) jest definiowany przez podział euklidesowy .

Dla dowolnych dwóch (d, q)liczb całkowitych zawsze obowiązuje :

d = ( d / q ) * q + ( d % q )

Jak widać, wartość d%q zależy od wartości d/q . Generalnie dla dodatnich liczb całkowitych d/qjest obcięte do zera , na przykład 5/2 daje 2, stąd:

5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1

Jednak w przypadku ujemnych liczb całkowitych sytuacja jest mniej jasna i zależy od języka i / lub normy. Na przykład -5/2 może zwrócić -2 (obcięte do zera, jak poprzednio), ale może również zwrócić -3 (z innym językiem).

W pierwszym przypadku:

-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1

ale w drugim:

-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1

Jak powiedziano wcześniej, pamiętaj tylko o niezmienniku , którym jest podział euklidesowy .

Dalsze szczegóły:

Picaud Vincent
źródło
1
Zaskakująco przydatne przy paginacji.
Bob Jordan
1

27% 16 = 11

Możesz to zinterpretować w ten sposób:

16 przechodzi 1 raz w 27 przed przejściem.

16 * 2 = 32.

Można więc powiedzieć, że 16 przypada raz na 27, a reszta to 11.

W rzeczywistości,

16 + 11 = 27

Inny przykład:

20% 3 = 2

Cóż, 3 przechodzi 6 razy w 20 przed przekazaniem.

3 * 6 = 18

Aby dodać do 20 potrzebujemy 2, więc reszta wyrażenia modułu wynosi 2.

William
źródło
0

To proste, operator modułu (%) zwraca resztę po dzieleniu liczb całkowitych. Weźmy przykład twojego pytania. Jak 27% 16 = 11? Kiedy po prostu podzielisz 27 przez 16, czyli (27/16), resztę otrzymasz jako 11 i dlatego twoja odpowiedź to 11.

Shiraz Shrestha
źródło
0

Wypisz tabelę zaczynającą się od 0.

{0,1,2,3,4}

Kontynuuj tabelę w rzędach.

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

Wszystko w pierwszej kolumnie jest wielokrotnością 5. Wszystko w kolumnie 2 jest wielokrotnością 5 z 1 jako resztą. Teraz część abstrakcyjna: Możesz to zapisać (1) jako 1/5 lub jako rozwinięcie dziesiętne. Operator modułu zwraca tylko kolumnę, lub inaczej zwraca resztę z dzielenia długiego. Masz do czynienia z modulo (5). Inny moduł, inny stół. Pomyśl o tabeli haszującej.

Terrence McLaughlin
źródło
0

Kiedy podzielimy dwie liczby całkowite, otrzymamy równanie, które wygląda następująco:

A / B = Q reszta R

A to dywidenda; B jest dzielnikiem; Q to iloraz, a R to reszta

Czasami interesuje nas tylko to, jaka jest reszta, gdy podzielimy A przez B. W takich przypadkach istnieje operator zwany operatorem modulo (w skrócie mod).

Przykłady

16/5= 3 Remainder 1  i.e  16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.

Zobacz artykuł Khan Academy, aby uzyskać więcej informacji.

W informatyce tablica Hash używa operatora Mod do przechowywania elementu, w którym A będzie wartością po haszowaniu, B będzie rozmiarem tabeli, a R jest liczbą szczelin lub kluczem, w który wstawiany jest element.

Aby uzyskać więcej informacji, zobacz Jak działa tabela skrótów

Yogendra Paudyal
źródło
-1

To było dla mnie najlepsze podejście do zrozumienia operatora modułu. Wyjaśnię ci tylko na przykładach.

16 % 3

Kiedy dzielisz te dwie liczby, wynikiem jest reszta. Tak to robię.

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

Więc to, co zostało do 16, to 1

16 % 3 = 1

Oto jeszcze jeden przykład: 16 % 7 = 7 + 7 = 14co pozostało do 16? Jest2 16 % 7 = 2

Jeszcze jedno: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . Więc reszta to zero,24 % 6 = 0

Nemus
źródło