ฉันอายที่จะถามคำถามง่าย ๆ แบบนี้ เทอมของฉันไม่ได้เริ่มเป็นเวลาอีกสองสัปดาห์ดังนั้นฉันจึงไม่สามารถถามอาจารย์ได้และผู้ต้องสงสัยจะฆ่าฉัน
ทำไม 2 mod 4 = 2
ฉันอายที่จะถามคำถามง่าย ๆ แบบนี้ เทอมของฉันไม่ได้เริ่มเป็นเวลาอีกสองสัปดาห์ดังนั้นฉันจึงไม่สามารถถามอาจารย์ได้และผู้ต้องสงสัยจะฆ่าฉัน
ทำไม 2 mod 4 = 2
คำตอบ:
Mod เพียงหมายความว่าคุณใช้เวลาที่เหลือหลังจากทำการแบ่ง ตั้งแต่ 4 ไปเป็น 2 ศูนย์คุณจะได้ส่วนที่เหลืออีก 2
โมดูโล่เป็นส่วนที่เหลือไม่ใช่การหาร
2 / 4 = 0R2
2 % 4 = 2
เข้าสู่ระบบมักจะใช้สำหรับผู้ประกอบการโมดูโลในแทนคำว่า%
mod
สำหรับx % 4
คุณจะได้รับตารางต่อไปนี้ (สำหรับ 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
Modulo (mod,%) เป็นตัวดำเนินการ Remainder
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)
ง่ายกว่าถ้าคุณใช้กล้วยและกลุ่มคน
สมมติว่าคุณมีกล้วย 1 ลูกและกลุ่มละ 6 คนคุณจะแสดง: 1 mod 6
/ 1 % 6
/1 modulo 6
/
คุณต้องการกล้วย 6 ลูกเพื่อให้แต่ละคนในกลุ่มได้รับอาหารที่ดีและมีความสุข
ดังนั้นถ้าคุณมีกล้วย 1 ลูกและต้องการแบ่งปันกับ 6 คน แต่คุณสามารถแบ่งปันได้ถ้าคุณมีกล้วย 1 ลูกต่อสมาชิกกลุ่มแต่ละกลุ่มนั่นคือ 6 คนคุณจะได้กล้วย 1 ลูก (ที่เหลือไม่ได้แชร์กับใครใน กลุ่ม) เช่นเดียวกับกล้วย 2 ใบ จากนั้นคุณจะมีกล้วย 2 ลูกที่เหลือ (ไม่มีการแบ่งปัน)
แต่เมื่อคุณได้รับ 6 กล้วยคุณควรจะมีความสุขเพราะมีกล้วย 1 ตัวสำหรับสมาชิกแต่ละคนในกลุ่ม 6 คนและส่วนที่เหลือคือ 0 หรือไม่มีกล้วยเหลืออยู่เมื่อคุณแชร์กล้วยทั้ง 6 คนใน 6 คน
ทีนี้สำหรับกล้วย 7 ลูกและ 6 คนในกลุ่มคุณก็จะมี 7 mod 6 = 1
เพราะคุณให้กล้วย 6 คนต่อกล้วย 1 อันและกล้วยที่เหลือ 1 อัน
สำหรับ12 mod 6
หรือ 12 กล้วยที่ใช้ร่วมกันใน 6 คนแต่ละคนจะมีสองกล้วยและส่วนที่เหลือคือ 0
2/4 = 0 ที่เหลือ 2
ฉันสับสนเกี่ยวกับเรื่องนี้เหมือนกันเมื่อไม่กี่นาทีที่ผ่านมา จากนั้นฉันก็ทำส่วนยาวด้วยกระดาษและมันก็สมเหตุสมผล:
เท่าที่คอมพิวเตอร์กำลังจะเกิดปัญหานี้ คอมพิวเตอร์หยุดอยู่ที่นั่นและส่งคืน 2 ซึ่งสมเหตุสมผลเนื่องจากเป็นสิ่งที่ "%" (mod) ร้องขอ
เราได้รับการฝึกฝนให้ใส่ทศนิยมและดำเนินต่อไปซึ่งเป็นสาเหตุที่สิ่งนี้สามารถต่อต้านได้ในตอนแรก
มีคนติดต่อฉันและขอให้ฉันอธิบายรายละเอียดเพิ่มเติมคำตอบของฉันในความคิดเห็นของคำถาม ดังนั้นนี่คือสิ่งที่ฉันตอบกลับบุคคลนั้นในกรณีที่สามารถช่วยเหลือผู้อื่นได้:
การดำเนินการแบบโมดูโลช่วยให้คุณได้รับส่วนที่เหลือจากการแตกแบบยุคลิด (ซึ่งใช้ได้กับจำนวนเต็มไม่ใช่จำนวนจริง) หากคุณมี A ที่ A = B * C + D (กับ D <B) ดังนั้นหารของ Euclidian ของ A โดย B คือ C และส่วนที่เหลือคือ D ถ้าคุณหาร 2 ด้วย 4, หารด้วย 0 และส่วนที่เหลือคือ 2
สมมติว่าคุณมีวัตถุ A (ที่คุณไม่สามารถตัดได้) และคุณต้องการกระจายวัตถุเหล่านั้นในจำนวนเดียวกันให้กับคน B ตราบใดที่คุณมีวัตถุมากกว่า B คุณให้แต่ละวัตถุ 1 และทำซ้ำ เมื่อคุณมีวัตถุน้อยกว่า B เหลือคุณหยุดและเก็บรักษาวัตถุที่เหลือ จำนวนเวลาที่คุณได้ทำการดำเนินการซ้ำแล้วเรียกว่าหมายเลข C คือความฉลาด จำนวนวัตถุที่คุณเก็บไว้ท้ายที่สุดเรียกมันว่า D คือส่วนที่เหลือ
หากคุณมี 2 วัตถุและ 4 คน คุณมีวัตถุน้อยกว่า 4 รายการ ดังนั้นแต่ละคนได้รับ 0 วัตถุและคุณเก็บ 2
นั่นเป็นสาเหตุที่ 2 โมดูโล 4 เป็น 2
ตัวดำเนินการ modulo จะประเมินค่าเป็นส่วนที่เหลือของการหารของตัวถูกดำเนินการจำนวนเต็มสองตัว นี่คือตัวอย่างบางส่วน:
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 หมายถึง reaminder เมื่อหารด้วย ดังนั้น 2 หารด้วย 4 คือ 0 โดยเหลือ 2 ดังนั้น 2 mod 4 คือ 2
Modulo เป็นส่วนที่เหลือซึ่งแสดงเป็นจำนวนเต็มของนิพจน์การหารทางคณิตศาสตร์
สมมติว่าคุณมีพิกเซลบนหน้าจอที่ตำแหน่ง 90 ซึ่งหน้าจอกว้าง 100 พิกเซลและเพิ่ม 20 มันจะล้อมไปที่ตำแหน่ง 10 เหตุใด ... เพราะ 90 + 20 = 110 จึง 110% 100 = 10
สำหรับฉันที่จะเข้าใจมันฉันคิดว่าโมดูโล่เป็นจำนวนเต็มแทนจำนวนเศษส่วน นอกจากนี้หากคุณทำนิพจน์ย้อนกลับและประมวลผลส่วนที่เหลือเป็นตัวเลขเศษส่วนแล้วเพิ่มลงในตัวหารมันจะให้คำตอบเดิมของคุณ
ตัวอย่าง:
100
(A) --- = 14 mod 2
7
123
(B) --- = 8 mod 3
15
3
(C) --- = 0 mod 3
4
วิศวกรรมย้อนกลับไปที่:
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 ด้วย 4 คุณจะได้ 0 ด้วย 2 เหลือหรือเหลือ โมดูโล่เป็นเพียงส่วนที่เหลือหลังจากหารจำนวน
ฉันคิดว่าคุณกำลังสับสนกับวิธีการอ่านสมการโมดูโล
เมื่อเราเขียนสมการหารเช่น2/4
เราหาร 2 ด้วย 4
เมื่อเขียนสมการโมดูโลเช่น2 % 4
เรากำลังหาร2 by 4
(คิด 2 ส่วน 4) และคืนค่าส่วนที่เหลือ
MOD เป็นตัวดำเนินการส่วนที่เหลือ นั่นคือสาเหตุที่ 2 mod 4 ให้ 2 เป็นส่วนที่เหลือ 4 * 0 = 0 แล้ว 2-0 = 2 เพื่อให้ชัดเจนยิ่งขึ้นลองทำเช่นเดียวกันกับ 6 mod 4 หรือ 8 mod 3
นี่คืออัลกอริทึม Euclid
เช่น
mod b = k * b + c => mod b = c โดยที่ k คือเลขจำนวนเต็มและ c คือคำตอบ
4 mod 2 = 2 * 2 + 0 => 4 mod 2 = 0
27 mod 5 = 5 * 5 + 2 => 27 mod 5 = 2
ดังนั้นคำตอบของคุณคือ
2 mod 4 = 0 * 4 + 2 => 2 mod 4 = 2
สำหรับ:
2 mod 4
เราสามารถใช้สูตรเล็ก ๆ นี้ที่ฉันคิดขึ้นมาหลังจากคิดไปเล็กน้อยบางทีมันอาจจะถูกนิยามไว้แล้วในบางที่ที่ฉันไม่รู้ แต่ใช้ได้กับฉันและมันมีประโยชน์จริงๆ
A mod B = C
โดยที่ C คือคำตอบ
K * B - A = |C|
ที่ K คือจำนวนครั้งที่ B พอดีกับ A
2 mod 4
อยากจะเป็น:
0 * 4 - 2 = |C|
C = |-2| => 2
หวังว่ามันจะเหมาะกับคุณ :)
สิ่งนี้เรียกว่าการคำนวณแบบแยกส่วน
a==b(mod m)
then m|(a-b)
a-b=km
a=b+km
So, 2=2+0*4
เพื่อตอบแบบโมดูโล x % y
คุณต้องถามสองคำถาม:
A- กี่ครั้งที่y
จะไปx
โดยไม่เหลือ? สำหรับ 2% 4 นั่นคือ 0
B- คุณต้องเพิ่มจำนวนเท่าใดเพื่อให้ได้สิ่งนั้นกลับมา x
? ในการรับจาก 0 ถึง 2 คุณจะต้อง 2-0 คือ 2
สิ่งเหล่านี้สามารถสรุปได้ในหนึ่งคำถามเช่น: คุณจะต้องเพิ่มผลลัพธ์การหารx
ด้วยจำนวนเต็มเท่าไหร่y
เพื่อกลับไปที่x
?
โดย integer-ish มันมีความหมายเฉพาะจำนวนเต็มและไม่เศษส่วนใด ๆ ที่น่าสนใจ
ส่วนที่เหลือเป็นเศษส่วน (เช่น. 283849) ไม่เป็นที่สนใจในโมดูโลเนื่องจากโมดูโล่จะทำกับตัวเลขจำนวนเต็มเท่านั้น
สำหรับวิธีการคิดเกี่ยวกับมันให้มองภาพใบหน้าของนาฬิกาที่ในตัวอย่างเฉพาะของคุณไปที่ 4 แทน 12 ถ้าคุณเริ่มที่ 4 บนนาฬิกา (ซึ่งก็เหมือนกับการเริ่มต้นที่ศูนย์) และหมุนไปตามเข็มนาฬิกาเพื่อ 2 "ชั่วโมง" คุณลงจอดบน 2 เหมือนเดินไปตามเข็มนาฬิกาเป็นเวลา 6 "ชั่วโมง" จะลงจอดคุณด้วย 2 (6 mod 4 == 2 เช่นเดียวกับ 2 mod 4 == 2)
นี่อาจเป็นเวลาที่ดีที่จะพูดถึงฟังก์ชั่น modr () มันส่งกลับทั้งส่วนและส่วนที่เหลือของการหาร
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
เพราะ