हमें पूर्णांक x और p दिए गए हैं। लक्ष्य समीकरण −x 2 . के हलों की संख्या ज्ञात करना है =1 (मॉड पी) जैसे कि x रेंज [1,N] में है।
हम इसे 1 से N तक पार करके करेंगे और प्रत्येक संख्या को x के रूप में जांचेंगे कि क्या (x*x)%p==1 है। अगर हाँ तो गिनती बढ़ाएँ।
आइए उदाहरणों से समझते हैं।
इनपुट - n=5, p=2
आउटपुट - समाधानों की संख्या - 3
स्पष्टीकरण - 1 से 5 की सीमा के बीच।
12=1%2=1, count=1 22=4%2=0, count=1 32=9%2=1, count=2 42=16%2=0, count=2 52=25%2=1, count=3 Total number of solutions=3.
इनपुट - n=3, p=4
आउटपुट - समाधानों की संख्या - 2
स्पष्टीकरण - 1 से 3 की सीमा के बीच।
12=1%4=1, count=1 22=4%4=0, count=1 32=9%4=1, count=2 Total number of solutions=2
नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है
-
हम दो चर n और p लेते हैं।
-
फ़ंक्शन समाधानगणना(int n,int p) दोनों पैरामीटर n और p लेता है और समीकरण के लिए समाधानों की संख्या देता है:x 2 %p==1 (या x 2 =1 (मॉड पी))।
-
x=1 से x=n तक, जांचें कि क्या x*x==1, यदि हां, तो वृद्धि की गणना करें।
-
लूप के अंत में, गिनती में समाधानों की संख्या होगी।
-
परिणाम के रूप में वापसी की गिनती।
उदाहरण
#include<bits/stdc++.h> using namespace std; int solutionsCount(int n, int p){ int count = 0; for (int x=1; x<=n; x++){ if ((x*x)%p == 1) { ++count; } } return count; } int main(){ int n = 8, p = 3; cout<<"Number of solutions :"<<solutionsCount(n, p); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Number of solutions : 6