Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาจำนวนคำตอบของสมการมอดุลาร์ด้วย C++

ในบทความนี้ เราจะอธิบายทุกอย่างเกี่ยวกับคำตอบของสมการมอดุลาร์ (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 หรือภาษาโปรแกรมมิ่งอื่นๆ หวังว่าบทความนี้จะช่วยให้เข้าใจแนวคิดการหาจำนวนคำตอบของสมการมอดุลาร์