คำนวณคณิตศาสตร์
เครื่องคำนวณมอดุโล


เครื่องคำนวณมอดุโล

เครื่องคำนวณมอดุโล (Modulo) ออนไลน์ ช่วยหาเศษเหลือจากการหารตัวเลขบวกและลบได้อย่างแม่นยำและรวดเร็ว พร้อมเรียนรู้วิธีหาค่าโมดูลัสด้วยตนเองอย่างง่ายดาย

มอดูลโอ

1

เกิดข้อผิดพลาดกับการคำนวณของคุณ

สารบัญ

  1. การคำนวณโดยไม่มีเครื่องคิดเลขมอดุโล
    1. ตัวอย่าง
  2. การสาธิตด้วยหน้าปัดนาฬิกาตามหลักการมอดุโล
    1. ตัวอย่าง
  3. การประยุกต์ใช้งานมอดุโล
    1. การตรวจสอบเลขคู่และเลขคี่
    2. การแปลงหน่วย
    3. การคำนวณปีอธิกสุรทิน (Leap Year)
  4. เครื่องกำเนิดตัวเลขสุ่ม (Random Number Generator)
    1. วิทยาการเข้ารหัสลับ (Cryptography)
  5. บทสรุป

เครื่องคำนวณมอดุโล

การดำเนินการมอดุโล (Modulo Operation) คือวิธีการทางคณิตศาสตร์ในการหา "เศษที่เหลือ" (Remainder) จากการหาร จุดเด่นของการหารเอาเศษแบบมอดุโลคือ ผลลัพธ์ที่ได้จะเป็นเศษเหลือที่เป็นจำนวนเต็มเสมอ

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

นี่คือตัวอย่างสถานการณ์ที่คุณสามารถใช้การดำเนินการมอดุโลได้ ในทางคณิตศาสตร์ สัญลักษณ์นี้มักจะเขียนแทนด้วยเครื่องหมาย % หรือคำว่า mod สำหรับตัวเลขจำนวนน้อยๆ คุณอาจจะสามารถคิดเลขในใจได้อย่างง่ายดาย แต่ถ้าคุณต้องจัดการกับตัวเลขที่มีค่ามาก การใช้เครื่องคิดเลขมอดุโล (Modulo Calculator) จะช่วยให้คุณคำนวณได้อย่างสะดวกและรวดเร็วมากยิ่งขึ้น

สมการพื้นฐานของการหารสามารถแสดงได้ดังนี้:

ตัวตั้ง = (ผลหาร × ตัวหาร) + เศษที่เหลือ

ในกรณีลูกอมของเรา:

  • ตัวตั้ง คือ 20 (จำนวนลูกอมทั้งหมด)
  • ตัวหาร คือ 3 (จำนวนเด็ก)
  • ผลหาร คือ 6 (จำนวนลูกอมที่เด็กแต่ละคนจะได้รับ)
  • เศษที่เหลือ คือ 2 (จำนวนลูกอมที่คุณสามารถเก็บไว้กินเองได้)

หากคุณนำการดำเนินการมอดุโลมาใช้ คุณสามารถเขียนให้อยู่ในรูปแบบสมการได้ดังนี้:

x % y = r

หรือ

x mod y = r

โดยที่ x คือตัวตั้ง, y คือตัวหาร และ r คือเศษที่เหลือ

ในกรณีของเราจะเขียนได้ว่า:

20 % 3 = 2

การคำนวณโดยไม่มีเครื่องคิดเลขมอดุโล

ลองมาดูสถานการณ์จำลองเพื่อความเข้าใจที่ชัดเจนยิ่งขึ้น

ตัวอย่าง

Wayan อาศัยอยู่ที่เกาะบาหลีและกำลังสร้างเกสต์เฮาส์ขนาดเล็กที่มีห้องพักจำนวนหกห้อง เขากำลังจะปูกระเบื้องห้องน้ำ Gede เพื่อนบ้านของเขาเพิ่งสร้างโรงแรมเสร็จ จึงเสนอขายกระเบื้องที่เหลือให้ Wayan ในราคาพิเศษ

Gede นับกระเบื้องในโกดังได้ 15 กล่อง แต่ละกล่องมีกระเบื้อง 4 แผ่น (ขนาด 60 × 60 ซม.) และยังมีเศษกระเบื้องเหลืออยู่อีก 2 แผ่นต่างหาก รวมทั้งหมดคือ 62 แผ่น ซึ่ง Gede ต้องการขายเหมาทั้งหมดในคราวเดียว

ตอนนี้ Wayan ต้องคำนวณว่า เขาจะสามารถปูกระเบื้องห้องน้ำได้กี่ห้องด้วยจำนวนกระเบื้องที่มี และจะมีเศษกระเบื้องเหลืออยู่กี่แผ่นที่ไม่ได้ใช้?

เราจะหาค่ามอดุโลด้วยตนเองโดยไม่ใช้เครื่องมือคำนวณ Mod ได้อย่างไร?

Wayan วัดขนาดห้องน้ำมาตรฐานในเกสต์เฮาส์ของเขา และพบว่าเขาต้องใช้กระเบื้องประมาณ 14 แผ่นต่อหนึ่งห้องน้ำ

มาเริ่มการคำนวณด้วยตนเองกันเลย!

  1. กำหนดตัวตั้ง (Dividend) ในกรณีนี้คือ 62 ซึ่งเป็นจำนวนกระเบื้องทั้งหมดที่เพื่อนบ้านเสนอขาย
  2. กำหนดตัวหาร (Divisor) ในกรณีนี้คือ 14 ซึ่งเป็นจำนวนกระเบื้องที่ต้องใช้ต่อหนึ่งห้องน้ำ
  3. นำตัวตั้งหารด้วยตัวหาร แล้วปัดเศษทิ้งให้เป็นจำนวนเต็ม 62 / 14 = 4.428571428571429 หรือปัดเป็น 4 นั่นหมายความว่า Wayan สามารถใช้กระเบื้องชุดนี้ปูห้องน้ำได้ทั้งหมด 4 ห้อง
  4. นำผลลัพธ์จำนวนเต็มที่ได้กลับไปคูณกับตัวหาร จะได้เป็น 4 × 14 = 56 นี่คือจำนวนกระเบื้องทั้งหมดที่จะถูกใช้สำหรับห้องน้ำทั้ง 4 ห้อง
  5. นำผลคูณที่ได้ไปลบออกจากตัวตั้งเริ่มต้น จะได้เป็น 62 - 56 = 6 นั่นหมายความว่า Wayan จะมีกระเบื้องเหลือเศษอยู่ 6 แผ่น

หากเขียนในรูปแบบที่สั้นและเข้าใจง่าย เราสามารถแสดงการคำนวณนี้ได้เป็น:

62 % 14 = 6

หรือ

62 mod 14 = 6

Wayan ตัดสินใจว่านี่เป็นข้อเสนอที่ดี เพราะในการปูกระเบื้องจริง ควรเผื่อกระเบื้องสำรองไว้ประมาณ 10% สำหรับการตัดแต่งหรือข้อผิดพลาดที่อาจเกิดขึ้น ส่วนห้องน้ำอีกสองห้องที่เหลือ เขาจะไปหาซื้อกระเบื้องจากร้านวัสดุก่อสร้างในพื้นที่เพิ่มเติม

แน่นอนว่า หากคุณใช้เครื่องคิดเลข Mod คุณจะได้ผลลัพธ์ทั้งหมดนี้ภายในเวลาเพียงไม่กี่วินาที

การสาธิตด้วยหน้าปัดนาฬิกาตามหลักการมอดุโล

สาขาหนึ่งของคณิตศาสตร์ที่เรียกว่า "เลขคณิตแบบมอดุลาร์" (Modular Arithmetic) จะเกี่ยวข้องกับโครงสร้างที่เป็นวงรอบหรือวัฏจักร วิธีที่ง่ายที่สุดในการนึกภาพสิ่งนี้คือ หน้าปัดนาฬิกาที่มีวงจรแบบ 12 ชั่วโมง สำหรับนักคณิตศาสตร์แล้ว หน้าปัดนาฬิกาก็คือตัวอย่างที่ชัดเจนของ mod 12

หากคุณต้องการคำนวณว่า เวลา 251 ชั่วโมงสามารถหารเป็นวันได้อย่างลงตัวโดยไม่มีเศษเหลือหรือไม่ คุณสามารถใช้สมการนี้ได้:

251 mod 24

ผลลัพธ์ที่ได้คือ 11 ดังนั้นคำตอบคือ "ไม่!" (เราจะตอบว่า "ใช่" ได้ก็ต่อเมื่อผลลัพธ์ที่ได้คือ 0)

ตัวอย่าง

Daniel ต้องการนั่งรถบัสจากแอตแลนตาไปไมอามี รถออกเดินทางเวลา 13:00 น. (บ่ายโมง) และใช้เวลาเดินทางบนถนน 15 ชั่วโมง เขาจะไปถึงจุดหมายในเวลาใด? สมการที่ใช้คือ:

1 + 15 mod 12

ผลลัพธ์คือ 4 ในกรณีนี้ เขาจะไปถึงในเวลา 4:00 น. (ตี 4)

การประยุกต์ใช้งานมอดุโล

การตรวจสอบเลขคู่และเลขคี่

หนึ่งในการประยุกต์ใช้งานตัวดำเนินการมอดุโล (Modulo Operator) ขั้นพื้นฐานที่สุดคือ การตรวจสอบว่าตัวเลขนั้นเป็นเลขคู่หรือเลขคี่ ซึ่งสามารถทำได้โดยสมการ x % 2 ที่จะให้ผลลัพธ์เป็น 0 หรือ 1 เสมอ ตัวเลขที่เป็นเลขคู่จะให้ค่ามอดุโลเป็น 0 เสมอเนื่องจากสามารถหารด้วย 2 ได้ลงตัว ในขณะที่เลขคี่จะเหลือเศษ 1 เสมอ

ตัวอย่างที่พบบ่อยที่สุดในการเขียนโปรแกรมคือ เมื่อคุณสร้างตารางในแอปพลิเคชันและต้องการสลับสีพื้นหลังของแถวให้อ่านง่าย เช่น แถวหนึ่งสีฟ้าอ่อน แถวถัดไปสีเทาอ่อน คุณเพียงแค่ใช้ฟังก์ชันมอดุโลเช็กว่าแถวปัจจุบันเป็นแถวคู่หรือแถวคี่

การแปลงหน่วย

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

ตัวอย่างเช่น หากเราต้องการทราบว่า 373 นาที เท่ากับกี่ชั่วโมง การแสดงผลลัพธ์เป็น "6 ชั่วโมง 13 นาที" ย่อมเข้าใจง่ายกว่า "6.21666666666666666666667 ชั่วโมง"

การหารแบบปกติ (ปัดเศษทิ้งเป็นจำนวนเต็ม) จะช่วยบอกจำนวน "ชั่วโมง" ส่วนตัวดำเนินการมอดุโลจะใช้เพื่อหาจำนวน "นาที" ที่เป็นเศษเหลือ ไม่ว่าคุณจะกำลังจัดการกับเวลา, ระยะทาง, ความดัน, พลังงาน หรือแม้แต่พื้นที่จัดเก็บข้อมูล คุณสามารถใช้วิธีการหารเอาเศษนี้เพื่อแปลงหน่วยได้อย่างสมบูรณ์แบบ

การคำนวณปีอธิกสุรทิน (Leap Year)

อีกตัวอย่างหนึ่งที่น่าสนใจของการใช้มอดุโลคือ การคำนวณว่าปีใดเป็นปีอธิกสุรทินหรือไม่

ปีอธิกสุรทิน (Leap Year) คือปีในปฏิทินสุริยคติที่มีวันเพิ่มขึ้นมาอีก 1 วัน ซึ่งก็คือวันที่ 29 กุมภาพันธ์ นั่นเอง

เมื่อวันที่ 1 มกราคม 45 ปีก่อนคริสตกาล จูเลียส ซีซาร์ (Gaius Julius Caesar) ผู้เผด็จการแห่งโรมัน ได้ประกาศใช้ปฏิทินที่พัฒนาขึ้นโดยนักดาราศาสตร์ชาวอเล็กซานเดรีย ปฏิทินนี้อิงตามการคำนวณที่ว่า ปีทางดาราศาสตร์หนึ่งปีมีประมาณ 365.25 วัน (365 วัน กับอีก 6 ชั่วโมง) ปฏิทินนี้ถูกเรียกว่า "ปฏิทินจูเลียน"

เพื่อชดเชยเศษ 6 ชั่วโมงที่เกินมา ซีซาร์จึงได้ริเริ่มระบบปีอธิกสุรทินขึ้นมา โดยกำหนดให้ 3 ปีติดต่อกันมี 365 วัน และทุกๆ ปีที่หารด้วย 4 ลงตัว จะมีการเพิ่มวันพิเศษ 1 วันในเดือนกุมภาพันธ์

อย่างไรก็ตาม เมื่อเวลาผ่านไป กลับพบว่าแค่กฎข้อนี้ยังไม่ครอบคลุมเพียงพอ

ความจริงแล้ว ปีสุริยคติ (เวลาที่โลกโคจรรอบดวงอาทิตย์จากฤดูใบไม้ผลิตลอดหนึ่งรอบ) มีความยาวนานประมาณ 365 วัน 5 ชั่วโมง 49 นาที ความแตกต่างระหว่างปีสุริยคติจริงกับปีปฏิทินจูเลียน (365 วัน 6 ชั่วโมง) จะเหลื่อมกันอยู่ประมาณ 11 นาที ซึ่งเมื่อผ่านไปประมาณ 128 ปี เวลา 11 นาทีเหล่านี้จะสะสมจนกลายเป็น 1 วันเต็มๆ

เพื่อแก้ไขความคลาดเคลื่อนที่สะสมมา และป้องกันการคลาดเคลื่อนในอนาคต สมเด็จพระสันตะปาปาเกรกอรีที่ 13 จึงได้ทำการปรับปรุงปฏิทินใหม่ในปี ค.ศ. 1582 พระองค์ได้เพิ่มกฎเกณฑ์พิเศษสำหรับปีอธิกสุรทิน โดยปีอธิกสุรทินยังคงเป็นปีที่หารด้วย 4 ลงตัว แต่จะมีข้อยกเว้นสำหรับปีที่หารด้วย 100 ลงตัว ปีเหล่านั้นจะเป็นปีอธิกสุรทินได้ก็ต่อเมื่อหารด้วย 400 ลงตัวเท่านั้น

ดังนั้น กฎสำหรับการกำหนดปีอธิกสุรทินจึงสรุปได้ดังนี้:

  • ปีที่หารด้วย 400 ลงตัว ถือเป็นปีอธิกสุรทิน
  • ปีที่หารด้วย 100 ลงตัว (แต่หาร 400 ไม่ลงตัว) ไม่ใช่ปีอธิกสุรทิน (ตัวอย่างเช่น ปี 1700, 1800, 1900, 2100, 2200, 2300)
  • ปีอื่นๆ ที่หารด้วย 4 ลงตัว ถือเป็นปีอธิกสุรทิน
  • ปีอื่นๆ นอกเหนือจากนี้ ไม่ใช่ปีอธิกสุรทิน

นั่นหมายความว่า ปี 1700, 1800 และ 1900 ไม่ใช่ปีอธิกสุรทิน เนื่องจากหารด้วย 100 ลงตัวแต่หารด้วย 400 ไม่ลงตัว ในขณะที่ปี 1600 และ 2000 ถือเป็นปีอธิกสุรทิน เนื่องจากหารด้วย 400 ลงตัว

กลับมาที่ปัญหาของเราเกี่ยวกับการนำมอดุโลมาใช้

เราสามารถกำหนดเงื่อนไขได้ว่า:

  • หาก (ปี mod 4 = 0) และ (ปี mod 100 ≠ 0) แสดงว่าเป็นปีอธิกสุรทิน
  • หาก (ปี mod 400 = 0) แสดงว่าเป็นปีอธิกสุรทิน
  • กรณีอื่นๆ นอกเหนือจากนี้ ไม่ใช่ปีอธิกสุรทิน

คุณสามารถเขียนสคริปต์ Python ง่ายๆ เพื่อตรวจสอบปีอธิกสุรทินได้ โค้ดจะมีหน้าตาดังนี้:

year = int(input('Enter year: '))

if (year%4 == 0 and year%100 != 0) or (year%400 == 0) :

	print(year, "is a leap year.")

else:

	print(year, "is not a leap year.")

ตัวอย่างการประยุกต์ใช้งานการดำเนินการมอดุโลในการเขียนโปรแกรมที่เป็นที่นิยมอื่นๆ ได้แก่:

  • การตรวจสอบตัวเลขว่าเป็นคู่หรือคี่
  • การรันคำสั่งเฉพาะกับทุกๆ ข้อมูลที่ N ในรายการ (List)
  • การควบคุมช่วงของตัวเลขให้อยู่ในขอบเขตที่กำหนด
  • การวนลูปผ่านตัวเลือกที่มีจำกัด (Circular arrays / อาร์เรย์แบบวงกลม)
  • การสลับหลักตัวเลข (Reversing numbers)
  • การแปลงข้อมูลจากเชิงเส้นให้เป็นรูปแบบเมทริกซ์ (Matrix)
  • การตรวจสอบว่าอาร์เรย์หนึ่งเป็นเวอร์ชันที่ถูกหมุนตำแหน่งของอีกอาร์เรย์หรือไม่
  • การทำระบบแบ่งหน้าเว็บ (Pagination)

เครื่องกำเนิดตัวเลขสุ่ม (Random Number Generator)

การจับคู่คณิตศาสตร์มอดุโลมักถูกใช้งานในฮาร์ดแวร์คอมพิวเตอร์และอุปกรณ์โทรคมนาคม เพื่อสร้างตัวเลขควบคุมและสร้างตัวเลขสุ่มในขอบเขตจำกัด ตัวอย่างเช่น วิธีคอนกรูเอนซ์เชิงเส้น (Linear Congruential Method) ซึ่งเป็นอัลกอริทึมการสุ่มตัวเลขที่ถูกคิดค้นโดย Derrick Henry Lehmer ในปี 1949

วิธีคอนกรูเอนซ์เชิงเส้น ทำงานภายใต้สมการ:

$$X_{n+1} = (a × X_n + c)\mod m$$

โดยที่:

  • m คือ ค่ามอดุโล (Modulo)
  • a คือ ตัวคูณ (Multiplier)
  • c คือ ค่าส่วนเพิ่ม (Increment) และ
  • X₀ คือ ค่าเริ่มต้น (Seed/Initial value)

ตัวอย่างเช่น หากเรากำหนด m = 11, X₀ = 9, a = 9, c = 9 เราจะได้ชุดตัวเลขสุ่มดังต่อไปนี้:

9, 2, 5, 10, 0, 9, 2, 5, 10, 0, 9

วิทยาการเข้ารหัสลับ (Cryptography)

นักวิทยาการเข้ารหัสลับ (Cryptographers) ชื่นชอบการใช้งานมอดุโลเป็นอย่างมาก เพราะเมื่อนำมาใช้กับตัวเลขที่มีขนาดใหญ่มากๆ คุณสามารถสร้างสิ่งที่เรียกว่า "ฟังก์ชันทางเดียว" (One-way function) ด้วยมอดุโลได้ ฟังก์ชันพิเศษเหล่านี้ทำให้คณิตศาสตร์สามารถคำนวณไปข้างหน้าได้ง่าย แต่เป็นเรื่องยากมากที่จะคำนวณย้อนกลับ

ลองนึกภาพตาม หากบอกว่า 9 คือผลลัพธ์ของการยกกำลัง คุณสามารถเดาได้ทันทีว่าเลขต้นทางคือ 3 คุณมองเห็นภาพรวมของกระบวนการทั้งหมดตั้งแต่ต้นจนจบ แต่ถ้าผมบอกคุณว่า 9 คือผลลัพธ์ที่เกิดจากการ mod 29 มันแทบจะเป็นไปไม่ได้เลยที่คุณจะเดาได้ว่าตัวเลขต้นทาง (Input) คืออะไร

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

บทสรุป

ไม่ว่าคุณจะพยายามแบ่งสิ่งของลงกล่องให้เท่าๆ กัน, อยากรู้ว่าตัวเลขหนึ่งหารอีกตัวเลขหนึ่งลงตัวหรือไม่ หรือแค่กำลังพยายามคำนวณเรื่องเวลา "การดำเนินการมอดุโล" จะเข้ามามีบทบาทเสมอ ในทุกสถานการณ์ที่กล่าวมา การหาเศษที่เหลือมีความสำคัญไม่แพ้การหาผลหารเลย

บางครั้งปัญหาการหารเอาเศษก็ดูตรงไปตรงมาและสามารถคิดในใจได้ แต่เมื่อตัวเลขเริ่มเยอะและมีความซับซ้อนมากขึ้น การเลือกใช้เครื่องคิดเลขมอดุโลออนไลน์ (Online Modulo Calculator) ย่อมเป็นทางเลือกที่ชาญฉลาด รวดเร็ว และแม่นยำที่สุดสำหรับคุณเสมอ