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?
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?
Odpowiedzi:
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)
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 6
lub 12 bananów podzielonych na 6 osób, każdy z nich będzie miał dwa banany, a reszta to 0.
Ja też byłem zdezorientowany zaledwie kilka minut temu. Potem zrobiłem podział odręcznie na kartce papieru i to miało sens:
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ą.
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.
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)
mod oznacza rozwiertak po podzieleniu przez. Zatem 2 podzielone przez 4 daje 0, a pozostało 2. Dlatego 2 mod 4 to 2.
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
Myślę, że jesteś zdezorientowany, jak odczytuje się równanie modulo.
Kiedy piszemy równanie dzielenia, takie jak 2/4
dzielenie 2 przez 4.
Kiedy zostanie zapisane równanie modulo, na przykład 2 % 4
dzielimy 2 by 4
(pomyśl 2 przez 4) i zwracamy resztę.
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.
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
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 :)
Aby odpowiedzieć na modulo x % y
, zadajesz dwa pytania:
A- Ile razy y
wchodzi x
bez 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 x
przez 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.
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).
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")
2 = 0 * 4 + 2
.