Dlaczego 2 mod 4 = 2?


150

Wstydzę się zadać tak proste pytanie. Mój semestr nie zaczyna się jeszcze przez dwa tygodnie, więc nie mogę poprosić profesora, a napięcie mnie zabije.

Dlaczego 2 mod 4 = 2?


45
Ponieważ 2 = 0 * 4 + 2.
p4bl0


1
W x / y wyniki składają się z części całkowitej i części ułamkowej. Jeśli pomnożymy część ułamkową przez dzielnik, otrzymamy resztę. A x = część całkowita y + reszta (tj. Część ułamkowa y). W tym przypadku część całkowita to 0, a reszta to 2.
mshsayem

76
cieszę się, że miałeś odwagę zadać to pytanie.
utorować

modulo jest bardzo daleko, aby być równe podzielenie dwóch liczb.
holex

Odpowiedzi:


151

Mod oznacza po prostu, że pobierasz resztę po wykonaniu podziału. Ponieważ 4 mieści się w 2 zero razy, otrzymujesz resztę 2.


95

Modulo to reszta, a nie dzielenie.

2 / 4 = 0R2
2 % 4 = 2

Znak %jest często używany zamiast słowa jako operatora modulo mod.

Na x % 4, masz w poniższej tabeli (dla 1-10)

 x x%4
------
 1  1
 2  2
 3  3
 4  0
 5  1
 6  2
 7  3
 8  0
 9  1
10  2

18

Operatorem reszty jest modulo (mod,%).

2%2 = 0 (2/2 = 1 remainder 0)
1%2 = 1 (1/2 = 0 remainder 1)
4%2 = 0 (4/2 = 2 remainder 0)
5%2 = 1 (5/2 = 2 remainder 1)

3
I "rozwlekłe" wyjaśnienie: 2 = 4 · 0 + 2 ;-)
Michael Krelin - haker

13

O wiele łatwiejsze, jeśli używasz bananów i grupy ludzi.

Powiedzmy, że masz 1 banana i grupę 6 osób, tak byś wyraził: 1 mod 6/ 1 % 6/ 1 modulo 6.

Potrzebujesz 6 bananów na każdą osobę w grupie, aby być dobrze odżywionym i szczęśliwym.

Więc jeśli masz 1 banana i chcesz podzielić się nim z 6 osobami, ale możesz udostępnić tylko wtedy, gdy masz 1 banana na każdego członka grupy, czyli 6 osób, wtedy będziesz mieć 1 banana (pozostały, nie udostępniony nikomu w grupa), to samo dotyczy 2 bananów. Następnie będziesz miał 2 banany jako resztę (nic nie jest dzielone).

Ale kiedy zdobędziesz 6 bananów, powinieneś być szczęśliwy, ponieważ wtedy jest 1 banan na każdego członka w grupie 6 osób, a reszta to 0 lub brak bananów, gdy podzieliłeś wszystkie 6 bananów na 6 osób.

Teraz, dla 7 bananów i 6 osób w grupie, będziesz mieć 7 mod 6 = 1 , ponieważ dałeś 6 osobom po 1 bananie, a 1 banan to reszta.

Dla 12 mod 6lub 12 bananów podzielonych na 6 osób, każdy z nich będzie miał dwa banany, a reszta to 0.



8

Ja też byłem zdezorientowany zaledwie kilka minut temu. Potem zrobiłem podział odręcznie na kartce papieru i to miało sens:

  • 4 przechodzi do 2 razy zero.
  • 4 razy 0 daje 0.
  • Umieszczasz to zero pod 2 i odejmujesz, co daje 2.

O ile komputer ma rozwiązać ten problem. Komputer zatrzymuje się w tym miejscu i zwraca 2, co ma sens, ponieważ o to prosi "%" (mod).

Zostaliśmy przeszkoleni, aby wprowadzać ułamki dziesiętne i kontynuować pracę, dlatego na początku może to być sprzeczne z intuicją.


7

Ktoś skontaktował się ze mną i poprosił o dokładniejsze wyjaśnienie mojej odpowiedzi w komentarzu do pytania. Oto, co odpowiedziałem tej osobie na wypadek, gdyby mogła pomóc komukolwiek innemu:

Operacja modulo daje ci pozostałą część euklidesowego podziału (który działa tylko z liczbami całkowitymi, a nie rzeczywistymi). Jeśli masz A takie, że A = B * C + D (z D <B), to iloraz euklidesowego dzielenia A przez B wynosi C, a reszta to D. Jeśli podzielisz 2 przez 4, iloraz wynosi 0, a reszta to 2.

Załóżmy, że masz obiekty typu A (których nie możesz ciąć). I chcesz rozdzielić taką samą ilość tych obiektów wśród osób B. Dopóki masz więcej niż B obiektów, każdemu z nich dajesz 1 i powtarzasz. Kiedy pozostało mniej niż B obiektów, zatrzymujesz się i zatrzymujesz pozostałe. Ilorazem jest liczba powtórzeń operacji, nazwijmy tę liczbę C. Pozostała liczba obiektów, które trzymasz na końcu, nazwijmy to D.

Jeśli masz 2 obiekty i 4 osoby. Masz już mniej niż 4 obiekty. Więc każda osoba dostaje 0 obiektów, a ty zatrzymujesz 2.

Dlatego 2 modulo 4 to 2.


5

Operator modulo oblicza pozostałą część z dzielenia dwóch operandów całkowitych. Oto kilka przykładów:

23 % 10 evaluates to 3 (because 23/10 is 2 with a remainder of 3)
50 % 50 evaluates to 0 (50/50 is 1 with a remainder of 0)
9 % 100 evaluates to 9 (9/100 is 0 with a remainder of 9)

4

mod oznacza rozwiertak po podzieleniu przez. Zatem 2 podzielone przez 4 daje 0, a pozostało 2. Dlatego 2 mod 4 to 2.


4

Modulo to reszta wyrażenia dzielenia matematycznego, wyrażona jako liczba całkowita.

Więc powiedzmy, że masz piksel na ekranie w pozycji 90, gdzie ekran ma szerokość 100 pikseli i dodajesz 20, zawinie się do pozycji 10. Dlaczego ... ponieważ 90 + 20 = 110, a zatem 110% 100 = 10.

Aby to zrozumieć, uważam, że modulo jest reprezentacją liczby całkowitej ułamkowej. Ponadto, jeśli wykonasz wyrażenie wstecz i przetworzysz resztę jako liczbę ułamkową, a następnie dodasz ją do dzielnika, da ci to oryginalną odpowiedź.

Przykłady:

    100
(A) ---  =  14 mod 2
     7

    123
(B) ---  =  8 mod 3
     15

     3
(C) ---  =  0 mod 3
     4

Odwrócona konstrukcja, aby:

                        2      14(7)    2       98    2     100
 (A) 14 mod 2  =  14 + ---  =  ----- + ---  =  --- + ---  = ---
                        7        7      7       7     7      7

                      3      8(15)    3      120    3      123
 (B) 8 mod 3  =  8 + ---  =  ----- + ---  =  --- + ---  =  ---
                      15       15     15      15    15      15

                      3       3
 (B) 0 mod 3  =  0 + ---  =  ---
                      4       4

2

Kiedy dzielisz 2 przez 4, otrzymujesz 0 z 2 pozostałymi lub pozostałymi. Modulo to po prostu reszta po podzieleniu liczby.


1

Myślę, że jesteś zdezorientowany, jak odczytuje się równanie modulo.

Kiedy piszemy równanie dzielenia, takie jak 2/4dzielenie 2 przez 4.

Kiedy zostanie zapisane równanie modulo, na przykład 2 % 4dzielimy 2 by 4(pomyśl 2 przez 4) i zwracamy resztę.


1

MOD jest operatorem reszty. Dlatego 2 mod 4 daje 2 jako resztę. 4 * 0 = 0, a następnie 2-0 = 2. Aby było to bardziej zrozumiałe, spróbuj zrobić to samo z 6 mod 4 lub 8 mod 3.


1

To jest algorytm Euclid.

na przykład

a mod b = k * b + c => a mod b = c, gdzie k to liczba całkowita, a c to odpowiedź

4 mod 2 = 2 * 2 + 0 => 4 mod 2 = 0

27 mod 5 = 5 * 5 + 2 => 27 mod 5 = 2

więc twoja odpowiedź brzmi

2 mod 4 = 0 * 4 + 2 => 2 mod 4 = 2


1

Dla:

2 mod 4

Możemy użyć tej małej formuły, którą wymyśliłem po zastanowieniu, może jest już zdefiniowana w miejscu, którego nie znam, ale działa dla mnie i jest naprawdę przydatna.

A mod B = C gdzie C jest odpowiedzią

K * B - A = |C| gdzie K to ile razy B mieści się w A.

2 mod 4 byłoby:

0 * 4 - 2 = |C|

C = |-2| => 2

Mam nadzieję, że to działa dla Ciebie :)


1

Operacja mod działa z przypomnieniem.

Nazywa się to arytmetyką modularną.

 a==b(mod m) 
 then m|(a-b)
 a-b=km 
 a=b+km
 So, 2=2+0*4

1

Aby odpowiedzieć na modulo x % y , zadajesz dwa pytania:

A- Ile razy ywchodzi xbez reszty? Dla 2% 4 to 0.

B- Ile musisz dodać, aby wrócić do x ? Aby dostać się od 0 z powrotem do 2, potrzebujesz 2-0, czyli 2.

Można je podsumować jednym pytaniem, takim jak to: Ile trzeba będzie dodać do całkowitego wyniku dzielenia xprzez by y, aby wrócić dox ?

Przez liczbę całkowitą rozumie się tylko liczby całkowite, a nie jakiekolwiek ułamki.

Reszta z dzielenia ułamkowego (np. 283849) nie jest interesująca w modulo, ponieważ modulo zajmuje się tylko liczbami całkowitymi.


0

Aby wizualnie o tym pomyśleć, wyobraź sobie tarczę zegara, która w twoim konkretnym przykładzie wskazuje tylko 4 zamiast 12. Jeśli zaczniesz od 4 na zegarze (co jest jak rozpoczęcie od zera) i obejdziesz go zgodnie z ruchem wskazówek zegara 2 "godziny", wylądujesz na 2, tak jak poruszanie się po nim zgodnie z ruchem wskazówek zegara przez 6 "godzin" również wylądowałoby na 2 (6 mod 4 == 2 tak jak 2 mod 4 == 2).


6
To właściwie dość zagmatwane.
Joe Phillips

@ do3boy: idea tarczy zegara jest bardzo prostą i łatwą metodą dokładnego opisania faktu modulo. poza tym, że łatwiej byłoby skorzystać z formatu 24h do wyjaśnienia, zamiast modyfikować liczbę dostępnych pozycji.
Atmocreations

0

To może być dobry moment, aby wspomnieć o funkcji modr (). Zwraca zarówno całość, jak i pozostałe części podziału.

print("\n 17 // 3 =",17//3," # Does the same thing as int(17/3)")
print(" 17 %  3 =",17%3," # Modulo division gives the remainder.")
whole, remain = divmod(17,3)
print(" divmod(17,3) returns ->",divmod(17,3),end="")
print(" because 3 goes into 17,",whole,"times with a remainder of",remain,end=".\n\n")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.