ในบทความนี้ เราจะอธิบายทุกอย่างเกี่ยวกับคำตอบของสมการมอดุลาร์ (Modular Equations) และเขียนโปรแกรมเพื่อหาจำนวนคำตอบ ตัวอย่างพื้นฐานดังนี้:
Input : X = 30 Y = 2 Output : 4, 7, 14, 28 Explanation : 30 mod 4 = 2 (เท่ากับ Y), 30 mod 7 = 2, 30 mod 14 = 2, 30 mod 28 = 2
จากตัวอย่างข้างต้น ทุกจำนวนเต็มที่หาร X แล้วได้เศษ Y จะเป็นคำตอบ ในตัวอย่างนี้ การหาร 30 ด้วย 4, 7, 14, 28 ให้เศษ 2 ซึ่งเท่ากับ Y เราจะแก้สมการมอดุลาร์ในลักษณะนี้
วิธีการหาคำตอบ
เราสามารถใช้วิธีง่ายๆ คือ หาร X ด้วยจำนวนเต็มทุกตัวตั้งแต่ 1 แล้วตรวจสอบว่าเศษเท่ากับ Y หรือไม่ หรือเราสามารถหาร (X - Y) ด้วยจำนวนเต็มทุกตัว และจำนวนเต็มที่หาร (X - Y) ลงตัวแต่ไม่หาร X ลงตัว จะเป็นคำตอบ มาเขียนโปรแกรม C++ เพื่อหาคำตอบของสมการมอดุลาร์
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int numberofdivisor(int X, int Y) {
int N = (X - Y);
int noOfDivisors = 1;
for (int i = 1; i <= N/2; i++) {
// หาก N หาร i ลงตัว
if ((N % i) == 0) {
// นับถ้าจำนวนเต็มนั้นมากกว่า Y
if (i > Y)
noOfDivisors++;
}
}
return noOfDivisors;
}
void numberofsolutions(int X, int Y) {
int noOfSolutions;
if (X == Y)
noOfSolutions = -1;
if (X < Y)
noOfSolutions = 0;
if (X > Y)
noOfSolutions = numberofdivisor(X, Y);
if (noOfSolutions == -1) {
cout << "X can take Infinitely many values" << " greater than " << X << "\n";
} else {
cout << "Number of solution = " << noOfSolutions;
}
}
// ฟังก์ชันหลัก
int main() {
int X, Y;
cin >> X;
cin >> Y;
numberofsolutions(X, Y);
return 0;
}
ผลลัพธ์
เมื่อใส่ 0 เป็นอินพุต โปรแกรมจะให้ผลลัพธ์ดังนี้:
X can take Infinitely many values greater than 0
เมื่อใส่ตัวเลขอื่น (ที่นี่เราใส่ 5) โปรแกรมจะแสดงผลลัพธ์ดังนี้:
Number of solution = 2
คำอธิบายโค้ด
ตอนนี้เราจะอธิบายแต่ละฟังก์ชันเพื่อให้เข้าใจโปรแกรมได้ง่ายขึ้น
ฟังก์ชัน main()
ในฟังก์ชันหลัก เรารับค่า X และ Y เป็นอินพุต และหาจำนวนคำตอบที่เป็นไปได้โดยเรียกฟังก์ชัน numberofsolutions()
ฟังก์ชัน Numberofsolutions()
ฟังก์ชันนี้ตรวจสอบว่า X และ Y ตอบสนองเงื่อนไขหรือไม่ โดย X ควรมากกว่า Y เพราะเราไม่สามารถหาเศษที่มากกว่าตัวตั้งได้ ฟังก์ชันนี้เรียกฟังก์ชัน numberofdivisor() อีกฟังก์ชันหนึ่ง และดึงจำนวนตัวหารของ X ที่ให้เศษ Y
ฟังก์ชัน Numberofdivisor()
ฟังก์ชันนี้หาจำนวนตัวหารของ X - Y โดยรันลูปจาก 1 ถึง (X - Y)/2 และตรวจสอบทุกจำนวนเต็มว่าหารลงตัวหรือไม่ และจำนวนเต็มนั้นไม่ควรหาร X ลงตัว
สรุป
คำตอบของสมการมอดุลาร์คือจำนวนเต็มที่หาร X แล้วได้เศษ Y เราเข้าใจเรื่องนี้จากตัวอย่างต่างๆ สมการอาจมีคำตอบบางส่วน เราหาคำตอบเหล่านี้โดยใช้วิธีง่ายๆ
เราสามารถเขียนโปรแกรม C++ ที่จะคำนวณคำตอบของสมการมอดุลาร์ได้ สามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, Java, Python หรือภาษาโปรแกรมมิ่งอื่นๆ หวังว่าบทความนี้จะช่วยให้เข้าใจแนวคิดการหาจำนวนคำตอบของสมการมอดุลาร์