Modulus Divison ทำงานอย่างไร


106

ฉันไม่เข้าใจจริงๆว่าการแบ่งโมดูลัสทำงานอย่างไร ฉันกำลังคำนวณ27 % 16และกระทบกระทั่งกับ11ฉันไม่เข้าใจว่าทำไม

ดูเหมือนฉันจะหาคำอธิบายในเงื่อนไขของคนธรรมดาทางออนไลน์ไม่ได้ ใครสามารถอธิบายในระดับที่สูงมากว่าเกิดอะไรขึ้นที่นี่?

คำตอบ:


108

ผลลัพธ์ของการหารโมดูโลคือส่วนที่เหลือของการหารจำนวนเต็มของตัวเลขที่กำหนด

นั่นหมายความว่า:

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

ตัวอย่างอื่น ๆ :

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

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2

66
โปรดอย่าใช้วิธีนี้ในทางที่ผิด แต่ตัวอย่างของคุณไม่ได้ชัดเจนอะไรสำหรับคนที่ไม่มีเงื่อนงำอย่างแน่นอนว่าเกิดอะไรขึ้นกับตัวหารแบบโมดิฟาย คุณทิ้งขั้นตอนที่สำคัญมากที่อธิบายว่าเศษเหลือมาจากไหน คำตอบของ Marcin M. ด้านล่างอธิบายกระบวนการได้ดีขึ้น โปรดพิจารณารายละเอียดเพิ่มเติมเกี่ยวกับคำตอบในอนาคตสำหรับพวกเราที่อาจไม่เข้าใจแนวคิดเลย ขอขอบคุณสำหรับการเป็นสมาชิกที่มีส่วนร่วมในชุมชน! คนอย่างคุณช่วยฉันและช่วยฉันในเส้นทางการศึกษาของฉันต่อไป :)
Soundfx4

อย่างไรก็ตามวิกิพีเดียโมดูลัสและส่วนที่เหลือไม่ใช่สิ่งเดียวกัน บางภาษามีภาษาหนึ่งภาษาอื่น ๆ บางภาษาทั้งสองภาษาและบางภาษาไมจไดฉกำหนด
Marquis of Lorne

156

คำอธิบายส่วนใหญ่พลาดขั้นตอนสำคัญไปหนึ่งอย่างลองเติมช่องว่างโดยใช้อีกตัวอย่าง

ให้สิ่งต่อไปนี้:

Dividend: 16
Divisor: 6

ฟังก์ชั่นโมดูลัสมีลักษณะเช่นนี้

16 % 6 = 4

มาดูกันว่าทำไมถึงเป็นเช่นนี้

ขั้นแรกให้ทำการหารจำนวนเต็มซึ่งคล้ายกับการหารปกติยกเว้นจำนวนเศษส่วน (aka ที่เหลือ) จะถูกทิ้ง:

16 / 6 = 2

จากนั้นคูณผลลัพธ์ของการหารด้านบน ( 2) ด้วยตัวหารของเรา( 6):

2 * 6 = 12

สุดท้ายลบผลลัพธ์ของการคูณด้านบน ( 12) จากเงินปันผลของเรา( 16):

16 - 12 = 4

ผลการลบนี้, 4ที่เหลือเป็นผลเดียวกันของเราโมดูลัสด้านบน!


1
คุณจะได้ 2 จาก 16/6 และไม่ใช่ 2,6666666667 ได้อย่างไร? คุณควรเพิกเฉยต่อ 0 เสมอ ... ? ทำไม?
Luc

3
@Luc ดังที่ Leo และ ytpillai กล่าวถึงเรากำลังใช้การหารจำนวนเต็ม (โดยที่ส่วนที่เป็นเศษส่วนของผลลัพธ์หลังจากการหารจะถูกทิ้ง) ใน Python 3: 16 // 6 >>> 2และ16 / 6 >>> 2.6666666666666665
bryik

30

บางทีตัวอย่างนาฬิกาอาจช่วยให้คุณเข้าใจโมดูโลได้

การใช้เลขคณิตแบบแยกส่วนที่คุ้นเคยคือการใช้ในนาฬิกา 12 ชั่วโมงซึ่งแบ่งวันออกเป็นสองช่วงเวลา 12 ชั่วโมง

สมมติว่าเรามีเวลานี้: 15:00 น.
แต่คุณสามารถบอกได้ว่าเป็นเวลา 15:00 น

นี่คือสิ่งที่โมดูโลทำ:

15 / 12 = 1, remainder 3

คุณพบว่าตัวอย่างนี้อธิบายได้ดีกว่าในวิกิพีเดีย: Wikipedia Modulo Article


29

สูตรง่ายๆในการคำนวณโมดูลัสคือ: -

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

ดังนั้น 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

คำตอบ = 11

หมายเหตุ :

การคำนวณทั้งหมดเป็นจำนวนเต็ม ในกรณีของผลหารทศนิยมส่วนหลังทศนิยมจะถูกละเว้น / ตัดทอน

เช่น 27/16 = 1.6875 จะถูกนำมาใช้เป็นเพียง 1 ในสูตรที่กล่าวถึงข้างต้น 0.6875 ถูกละเว้น

คอมไพเลอร์ของภาษาคอมพิวเตอร์ปฏิบัติต่อจำนวนเต็มที่มีส่วนทศนิยมในลักษณะเดียวกัน (โดยการตัดทอนหลังทศนิยม) เช่นกัน


แล้ว 3% 7 ล่ะ?
eaglei22

มันจะเป็นแค่ 3?
eaglei22

15

ตัวดำเนินการโมดูลัสรับคำสั่งการหารและส่งกลับสิ่งที่เหลือจากการคำนวณนั้นคือข้อมูล "ที่เหลือ" เพื่อที่จะพูดเช่น 13/5 = 2 ซึ่งหมายความว่ามี 3 ที่เหลือหรือเหลือจากการคำนวณนั้น ทำไม? เพราะ 2 * 5 = 10 ดังนั้น 13 - 10 = 3

ตัวดำเนินการโมดูลัสทำการคำนวณทั้งหมดให้คุณ 13% 5 = 3


ฉันคิดว่าคำตอบนี้อธิบายได้ดีที่สุดจากมุมมองทางความคิด คำตอบอื่น ๆ อธิบายทางคณิตศาสตร์ซึ่งจำเป็นเช่นกัน แต่สิ่งนี้ช่วยให้ฉันเข้าใจได้ดีขึ้นว่าจะใช้ตัวดำเนินการโมดูโลได้อย่างไร
JonnyB

7

การหารโมดูลัสเป็นเพียงแค่นี้: หารสองจำนวนและส่งกลับส่วนที่เหลือเท่านั้น

27/16 = 1 เหลือ 11 ดังนั้น 27% 16 = 11

ditto 43/16 = 2 โดยเหลือ 11 ดังนั้น 43% 16 = 11 ด้วย



5

ฉันต้องการเพิ่มอีกสิ่งหนึ่ง:

ง่ายต่อการคำนวณโมดูโลเมื่อเงินปันผลมากกว่า / มากกว่าตัวหาร

เงินปันผล = 5 ตัวหาร = 3

5% 3 = 2

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

แต่ถ้าตัวหารน้อยกว่าเงินปันผล

เงินปันผล = 3 ตัวหาร = 5

3% 5 = 3 ?? อย่างไร

เนื่องจาก 5 ไม่สามารถหาร 3 โดยตรงโมดูโลจะเป็นตัวปันผล


3

ฉันหวังว่าขั้นตอนง่ายๆเหล่านี้จะช่วยได้:

20 % 3 = 2 
  1. 20 / 3 = 6; อย่าใส่.6667- อย่าสนใจมัน
  2. 3 * 6 = 18
  3. 20 - 18 = 2ซึ่งเป็นส่วนที่เหลือของโมดูโล

ช่วยจัดรูปแบบคำตอบนี้ให้ดีขึ้นหน่อยได้ไหม
รหัส Maverick

ตรวจสอบคำตอบของ Code Jammer
Ajmal Salim

2

ง่ายขึ้นเมื่อตัวเลขของคุณหลังทศนิยม (0.xxx) สั้น จากนั้นสิ่งที่คุณต้องทำคือคูณจำนวนนั้นด้วยจำนวนหลังการหาร

เช่น: 32 % 12 = 8

คุณทำ32/12=2.666666667 แล้วคุณโยนทิ้ง2และมุ่งเน้นไปที่0.666666667 0.666666667*12=8<- นั่นคือคำตอบของคุณ

(อีกครั้งง่ายก็ต่อเมื่อตัวเลขหลังทศนิยมสั้น)


1

การหารโมดูลัสให้ส่วนที่เหลือของการหารแทนที่จะเป็นผลหาร


1

สมมติว่าคุณมี 17 mod 6

ผลรวมของ 6 จะทำให้คุณใกล้เคียงกับ 17 มากที่สุดมันจะเป็น 12 เพราะถ้าคุณไปมากกว่า 12 คุณจะมี 18 ซึ่งมากกว่าคำถามของ 17 mod 6 จากนั้นคุณจะได้ 12 และลบจาก 17 ซึ่งจะให้คุณ คำตอบของคุณในกรณีนี้ 5.

17 สมัย 6 = 5


1

การแบ่งโมดูลัสค่อนข้างง่าย ใช้ส่วนที่เหลือแทนผลหาร

    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.


ช่วยให้คิดว่าโมดูลัสเป็น "วัฏจักร"

ในคำอื่น ๆ สำหรับการแสดงออกn % 12ผลจะเสมอเป็น <12

นั่นหมายความว่าลำดับของ set 0..100for n % 12คือ:

{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}

ในสภาพแสงนั้นโมดูลัสรวมถึงการใช้งานจะชัดเจนขึ้นมาก


1

สิ่งที่สำคัญเท่านั้นที่จะเข้าใจได้ว่าโมดูลัส (แสดงที่นี่โดย% เหมือนใน C) หมายผ่านการแบ่งยุคลิด

สำหรับ(d, q)จำนวนเต็มสองจำนวนใด ๆต่อไปนี้เป็นจริงเสมอ :

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

อย่างที่คุณเห็นค่าd%q ขึ้นอยู่กับค่าของ d/q . โดยทั่วไปสำหรับจำนวนเต็มบวกd/qจะถูกตัดทอนเป็นศูนย์เช่น 5/2 ให้ 2 ดังนั้น:

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

อย่างไรก็ตามสำหรับจำนวนเต็มลบสถานการณ์จะไม่ชัดเจนและขึ้นอยู่กับภาษาและ / หรือมาตรฐาน ตัวอย่างเช่น -5/2 สามารถคืนค่า -2 (ถูกตัดทอนเป็นศูนย์เหมือนเดิม) แต่ยังสามารถคืนค่า -3 (ด้วยภาษาอื่น)

ในกรณีแรก:

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

แต่ในอันที่สอง:

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

ที่กล่าวก่อนเพียงจำคงที่ซึ่งเป็นส่วนยุคลิด

รายละเอียดเพิ่มเติม:


1
มีประโยชน์อย่างน่าประหลาดใจเกี่ยวกับการแบ่งหน้า
Bob Jordan

1

27% 16 = 11

คุณสามารถตีความได้ด้วยวิธีนี้:

16 ไป 1 คูณ 27 ก่อนผ่าน

16 * 2 = 32.

คุณก็บอกได้ว่า 16 ไปครั้งเดียวใน 27 โดยเหลือ 11

ในความเป็นจริง,

16 + 11 = 27

ตัวอย่างอื่น ๆ :

20% 3 = 2

ทีนี้ 3 ไป 6 คูณหาร 20 ก่อนผ่านไป

3 * 6 = 18

ในการบวกได้ถึง 20 เราต้องการ 2 ดังนั้นส่วนที่เหลือของนิพจน์โมดูลัสจึงเป็น 2


0

มันง่ายมากตัวดำเนินการโมดูลัส (%) จะคืนค่าส่วนที่เหลือหลังจากการหารจำนวนเต็ม ลองดูตัวอย่างคำถามของคุณ 27% 16 = 11 เท่าไหร่? เมื่อคุณหาร 27 ด้วย 16 เช่น (27/16) คุณจะได้เศษที่เหลือเป็น 11 และนั่นคือสาเหตุที่คำตอบของคุณคือ 11


0

เขียนตารางโดยเริ่มต้นด้วย 0

{0,1,2,3,4}

ต่อตารางเป็นแถว

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

ทุกอย่างในคอลัมน์แรกเป็นผลคูณของ 5 ทุกอย่างในคอลัมน์ 2 เป็นผลคูณของ 5 โดยมี 1 เป็นส่วนที่เหลือ ตอนนี้เป็นส่วนนามธรรม: คุณสามารถเขียนว่า (1) เป็น 1/5 หรือเป็นการขยายทศนิยม ตัวดำเนินการโมดูลัสจะส่งกลับเฉพาะคอลัมน์หรือในอีกวิธีหนึ่งในการคิดก็จะส่งกลับส่วนที่เหลือในการหารยาว คุณกำลังซื้อขายในโมดูโล (5) โมดูลัสที่แตกต่างกันตารางที่แตกต่างกัน ลองนึกถึงตารางแฮช


0

เมื่อเราหารจำนวนเต็มสองจำนวนเราจะได้สมการที่มีลักษณะดังต่อไปนี้:

A / B = Q ส่วนที่เหลือ R

A คือเงินปันผล B คือตัวหาร Q คือผลหารและ R คือเศษที่เหลือ

บางครั้งเราสนใจเฉพาะส่วนที่เหลือเมื่อเราหาร A ด้วย B สำหรับกรณีเหล่านี้มีตัวดำเนินการที่เรียกว่าตัวดำเนินการโมดูโล (ตัวย่อว่า mod)

ตัวอย่าง

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.

ดูบทความของ Khan Academyสำหรับข้อมูลเพิ่มเติม

ในวิทยาการคอมพิวเตอร์ตารางแฮชใช้ตัวดำเนินการ Mod เพื่อเก็บองค์ประกอบโดยที่ A จะเป็นค่าหลังจากการแฮช B จะเป็นขนาดตารางและ R คือจำนวนช่องหรือคีย์ที่ใส่องค์ประกอบ

ดูตารางแฮชทำงานอย่างไรสำหรับข้อมูลเพิ่มเติม


-1

นี่เป็นแนวทางที่ดีที่สุดสำหรับฉันในการทำความเข้าใจตัวดำเนินการโมดูลัส ฉันจะอธิบายให้คุณฟังผ่านตัวอย่าง

16 % 3

เมื่อคุณหารสองจำนวนนี้ส่วนที่เหลือคือผลลัพธ์ นี่คือวิธีที่ฉันทำ

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

สิ่งที่เหลือถึง 16 คือ 1

16 % 3 = 1

นี่คืออีกหนึ่งตัวอย่าง: 16 % 7 = 7 + 7 = 14สิ่งที่เหลือถึง 16? คือ2 16 % 7 = 2

อีกหนึ่ง: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . เศษที่เหลือจึงเป็นศูนย์24 % 6 = 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.