Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

मॉड्यूलो p के तहत वर्गमूल ज्ञात करें (जब p 4*i + 3 के रूप में हो) C++ में


इस समस्या में, हमें दो मान n और एक अभाज्य संख्या p दिए गए हैं। हमारा कार्य मॉड्यूलो p के तहत वर्गमूल ज्ञात करना है (जब p 4*i + 3 के रूप में हो)। यहां, p (4*i + 3) के रूप में है यानी p % 4 = 3, i > 1 के लिए और p एक अभाज्य संख्या है।

ऐसी कुछ संख्याएं हैं: 7, 11, 19, 23, 31...

उदाहरण से समझते हैं:

इनपुट: n = 3, p = 7 आउटपुट:

समाधान दृष्टिकोण

समस्या का एक सरल समाधान लूप का उपयोग करना है। हम 2 से (p - 1) तक लूप करेंगे। और प्रत्येक मान के लिए, जांचेंगे कि क्या इसका वर्ग मॉड्यूलो p के तहत वर्गमूल n है।

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

#include <iostream> using namespace std; void findSquareRootMod(int n, int p) {    n = n % p;    for (int i = 2; i < p; i++) {       if ((i * i) % p == n) {          cout<<"Square root under modulo is "<<i;          return;       }    }    cout<<"Square root doesn't exist"; } int main(){    int p = 11;    int n = 3;    findSquareRootMod(n, p);    return 0; }

आउटपुट

Square root under modulo is 5

एक और विधि सीधे सूत्र का उपयोग करना है,

यदि p (4*i + 3) के रूप में है और वर्गमूल के अस्तित्व के लिए यह $+/-n^{(p+1)/4}$ होगा।

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

#include <iostream> using namespace std; int calcPowerVal(int x, int y, int p) {    int res = 1;    x = x % p;    while (y > 0) {       if (y & 1)       res = (res * x) % p;       y /= 2;       x = (x * x) % p;    }    return res; } void squareRoot(int n, int p) {    if (p % 4 != 3) {       cout << "Invalid Input";       return;    }    n = n % p;    int sr = calcPowerVal(n, (p + 1) / 4, p);    if ((sr * sr) % p == n) {       cout<<"Square root under modulo is "<<sr;       return;    }    sr = p - sr;    if ((sr * sr) % p == n) {       cout << "Square root is "<<sr;       return;    }    cout<<"Square root doesn't exist "; } int main() { int p = 11; int n = 4; squareRoot(n, p); return 0; }

आउटपुट

Square root under modulo is 9

  1. C++ में दूषित बाइनरी ट्री में तत्व खोजें C++ में दूषित बाइनरी ट्री में तत्व खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। उस ट्री के नियम इस प्रकार हैं: root.val == 0 यदि treeNode.val x है और treeNode.left null नहीं है, तो treeNode.left.val = 2 * x + 1 यदि treeNode.val x है और treeNode.right null नहीं है, तो treeNode.right.val = 2 * x + 2 अब चूंकि बाइनरी ट्री दूषित है। यह इंगि

  1. - C++ प्रोग्राम: दिए गए प्रतिबंधों के तहत डुप्लिकेट ज्ञात करना

    मान लें हमारे पास 6 अलग-अलग संख्याओं की एक सूची है। केवल एक संख्या पांच बार दोहराई जाती है। इसलिए सरणी में कुल 10 तत्व हैं। केवल दो तुलनाओं का उपयोग करके डुप्लिकेट संख्या ज्ञात करें। यदि सूची [1, 2, 3, 4, 4, 4, 4, 4, 5, 6] की तरह है, तो आउटपुट 4 है। चूंकि केवल 10 संख्याएं हैं, तो किसी भी प्रकार की

  1. - C++ प्रोग्राम: संख्या का घनमूल ज्ञात करना

    यहां हम देखेंगे कि किसी संख्या का घनमूल कैसे प्राप्त करें। मान लें कोई संख्या 27 है, तो इस संख्या का घनमूल 3 होगा। इस समस्या को हल करने के लिए, हम कुछ लाइब्रेरी फंक्शन का उपयोग किए बिना अपना तर्क परिभाषित करेंगे। हम बाइनरी सर्च दृष्टिकोण का उपयोग करेंगे। इस समस्या को हल करने के लिए हमें इन चरणों का