Tôi xấu hổ khi hỏi một câu hỏi đơn giản như vậy. Nhiệm kỳ của tôi không bắt đầu thêm hai tuần nữa vì vậy tôi không thể hỏi giáo sư và sự hồi hộp sẽ giết chết tôi.
Tại sao 2 mod 4 = 2?
Tôi xấu hổ khi hỏi một câu hỏi đơn giản như vậy. Nhiệm kỳ của tôi không bắt đầu thêm hai tuần nữa vì vậy tôi không thể hỏi giáo sư và sự hồi hộp sẽ giết chết tôi.
Tại sao 2 mod 4 = 2?
Câu trả lời:
Modulo (mod,%) là toán tử còn lại.
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)
Dễ dàng hơn nhiều nếu bạn sử dụng chuối và một nhóm người.
Giả sử bạn có 1 quả chuối và nhóm 6 người, điều này bạn sẽ bày tỏ: 1 mod 6
/ 1 % 6
/ 1 modulo 6
.
Bạn cần 6 quả chuối cho mỗi người trong nhóm để được ăn no và hạnh phúc.
Vì vậy, nếu sau đó bạn có 1 quả chuối và cần chia sẻ với 6 người, nhưng bạn chỉ có thể chia sẻ nếu bạn có 1 quả chuối cho mỗi thành viên trong nhóm, tức là 6 người, thì bạn sẽ có 1 quả chuối (phần còn lại, không chia sẻ cho bất kỳ ai trong nhóm), cùng đi cho 2 quả chuối. Sau đó, bạn sẽ có 2 quả chuối như phần còn lại (không có gì được chia sẻ).
Nhưng khi bạn nhận được 6 quả chuối, thì bạn nên vui mừng, vì sau đó có 1 quả chuối cho mỗi thành viên trong nhóm 6 người, và số còn lại là 0 hoặc không còn chuối khi bạn chia sẻ tất cả 6 quả chuối trên 6 người.
Bây giờ, cho 7 quả chuối và 6 người trong nhóm, sau đó bạn sẽ có 7 mod 6 = 1
, điều này bởi vì bạn đã cho 6 người mỗi quả chuối, và 1 quả chuối là phần còn lại.
Cho 12 mod 6
hoặc 12 quả chuối được chia sẻ trên 6 người, mỗi người sẽ có hai quả chuối và số còn lại là 0.
Tôi cũng bối rối về điều này, chỉ một vài phút trước đây. Sau đó, tôi đã phân chia tay dài trên một tờ giấy và nó có ý nghĩa:
Đó là xa như máy tính sẽ có vấn đề này. Máy tính dừng ở đó và trả về 2, điều này hợp lý vì đó là những gì "%" (mod) đang yêu cầu.
Chúng tôi đã được đào tạo để đưa vào số thập phân và tiếp tục, đó là lý do tại sao điều này có thể phản trực giác lúc đầu.
Ai đó đã liên lạc với tôi và yêu cầu tôi giải thích chi tiết hơn câu trả lời của tôi trong phần bình luận của câu hỏi. Vì vậy, đây là những gì tôi đã trả lời cho người đó trong trường hợp nó có thể giúp đỡ bất cứ ai khác:
Hoạt động modulo cung cấp cho bạn phần còn lại của sự phân ly eidianidian (chỉ hoạt động với số nguyên, không phải số thực). Nếu bạn có A sao cho A = B * C + D (với D <B), thì thương số của phép chia số nhân của A cho B là C và phần còn lại là D. Nếu bạn chia 2 cho 4, thương số là 0 và phần còn lại là 2.
Giả sử bạn có một đối tượng A (mà bạn không thể cắt). Và bạn muốn phân phối cùng một lượng đối tượng đó cho người B. Miễn là bạn có nhiều hơn B đối tượng, bạn cung cấp cho mỗi đối tượng 1 và lặp lại. Khi bạn có ít hơn B đối tượng, bạn dừng lại và giữ các đối tượng còn lại. Số lượng thời gian bạn đã lặp lại thao tác, hãy gọi số C đó là thương số. Số lượng đối tượng bạn giữ ở cuối, hãy gọi nó là D, là phần còn lại.
Nếu bạn có 2 đối tượng và 4 người. Bạn đã có ít hơn 4 đối tượng. Vì vậy, mỗi người nhận được 0 đối tượng, và bạn giữ 2.
Đó là lý do tại sao 2 modulo 4 là 2.
mod có nghĩa là reaminder khi chia cho. Vậy 2 chia cho 4 là 0 với 2 còn lại. Do đó 2 mod 4 là 2.
Modulo là phần còn lại, được biểu thị dưới dạng một số nguyên, của biểu thức phân chia toán học.
Vì vậy, giả sử bạn có một pixel trên màn hình ở vị trí 90 trong đó màn hình rộng 100 pixel và thêm 20 pixel, nó sẽ bao quanh vị trí 10. Tại sao ... vì 90 + 20 = 110 do đó 110% 100 = 10.
Để tôi hiểu nó, tôi coi modulo là biểu diễn số nguyên của số phân số. Hơn nữa, nếu bạn thực hiện biểu thức ngược và xử lý phần còn lại dưới dạng số phân số và sau đó được thêm vào ước số, nó sẽ cung cấp cho bạn câu trả lời ban đầu của bạn.
Ví dụ:
100
(A) --- = 14 mod 2
7
123
(B) --- = 8 mod 3
15
3
(C) --- = 0 mod 3
4
Được thiết kế lại để:
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
Tôi nghĩ rằng bạn đang nhận được nhầm lẫn về cách đọc phương trình modulo.
Khi chúng ta viết một phương trình chia như 2/4
chúng ta chia 2 cho 4.
Khi một phương trình modulo được viết như 2 % 4
chúng ta đang chia 2 by 4
(nghĩ 2 trên 4) và trả về phần còn lại.
MOD là toán tử còn lại. Đó là lý do tại sao 2 mod 4 cho 2 là phần còn lại. 4 * 0 = 0 và sau đó 2-0 = 2. Để làm rõ hơn, hãy thử làm tương tự với 6 mod 4 hoặc 8 mod 3.
Đây là thuật toán Euclid.
ví dụ
a mod b = k * b + c => a mod b = c, trong đó k là số nguyên và c là câu trả lời
4 mod 2 = 2 * 2 + 0 => 4 mod 2 = 0
27 mod 5 = 5 * 5 + 2 => 27 mod 5 = 2
vậy câu trả lời của bạn là
2 mod 4 = 0 * 4 + 2 => 2 mod 4 = 2
Dành cho:
2 mod 4
Chúng ta có thể sử dụng công thức nhỏ này mà tôi đã nghĩ ra sau khi suy nghĩ một chút, có thể nó đã được xác định ở đâu đó mà tôi không biết nhưng hiệu quả với tôi và nó thực sự hữu ích.
A mod B = C
Trong đó C là câu trả lời
K * B - A = |C|
Trong đó K là bao nhiêu lần B phù hợp với A
2 mod 4
sẽ là:
0 * 4 - 2 = |C|
C = |-2| => 2
Hi vọng nó sẽ giúp ích cho bạn :)
Để trả lời một modulo x % y
, bạn hỏi hai câu hỏi:
A- Bao nhiêu lần y
đi vào x
mà không có phần còn lại? Đối với 2% 4 đó là 0.
B- Bạn cần thêm bao nhiêu để có được từ đó trở lại x
? Để có được từ 0 trở về 2, bạn sẽ cần 2-0, tức là 2.
Những câu hỏi này có thể được tóm tắt trong một câu hỏi như vậy: Bạn sẽ cần thêm bao nhiêu vào kết quả số nguyên-ish của phép chia x
theo y
, để lấy lại x
?
Theo số nguyên, nó chỉ có nghĩa là toàn bộ số và không phải là phân số nào được quan tâm.
Phần còn lại phân chia phân số (ví dụ: 283849) không được quan tâm trong modulo vì modulo chỉ liên quan đến số nguyên.
Đối với một cách trực quan để suy nghĩ về nó, hãy hình dung một mặt đồng hồ, trong ví dụ cụ thể của bạn, chỉ chuyển sang 4 thay vì 12. Nếu bạn bắt đầu từ 4 trên đồng hồ (giống như bắt đầu từ 0) và đi xung quanh theo chiều kim đồng hồ để 2 "giờ", bạn hạ cánh trên 2, giống như đi vòng quanh theo chiều kim đồng hồ trong 6 "giờ" cũng sẽ hạ cánh bạn trên 2 (6 mod 4 == 2 giống như 2 mod 4 == 2).
Đây có thể là thời điểm tốt để đề cập đến hàm modr (). Nó trả về cả phần và phần còn lại của một bộ phận.
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
.