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

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

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

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

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input : n = 3, p = 7
Output :

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

समस्या का एक सरल समाधान लूप का उपयोग कर रहा है। हम 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++ में दूषित बाइनरी ट्री में तत्वों का पता लगाएं

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

  1. सी++ में दी गई बाधाओं के तहत डुप्लीकेट खोजें

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

  1. C++ में किसी संख्या का घनमूल ज्ञात कीजिए

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