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

C++ प्रोग्राम राबिन-मिलर प्रिमलिटी टेस्ट को लागू करने के लिए यह जाँचने के लिए कि क्या कोई दिया गया नंबर प्राइम है

राबिन-मिलर प्रिमलिटी टेस्ट का उपयोग यह जांचने के लिए किया जाता है कि दी गई संख्या अभाज्य है या नहीं। यह फॉर्मेट प्रिमलिटी और सोलोवे-स्ट्रेसन टेस्ट के समान है। इस परीक्षण की खोज सबसे पहले रूसी गणितज्ञ एम. एम. आर्टजुहोव ने की थी।

एल्गोरिदम

Begin
   ll mulmod(ll a, ll b, ll m)
   ll x = 0,y = a mod m
   while (b > 0)
      if (b mod 2 == 1)
         compute x = (x + y) mod m
         y = (y * 2) mod m
         b = b/ 2
   return x mod m.
End

Begin
   ll modulo(ll base, ll e, ll m)
   Initialize:
   ll x = 1
   ll y = base
   while (e > 0)
      if (e mod 2 == 1)
         x = (x * y) mod m
         y = (y * y) mod m
         e = e / 2;
   return x mod m
End

Begin
   bool Miller(ll p, int iteration)
   if (p < 2)
      return false
   if (p != 2 and p mod 2==0)
      return false;
      Compute: ll s = p - 1
   while (s mod 2 == 0)
      s = s/ 2;
      for i = 0 to iteration - 1
         Do
            ll a = rand() mod (p - 1) + 1, temp = s
            ll mod = modulo(a, temp, p)
            while (temp != p - 1 and mod != 1 and mod != p - 1)
               mod = mulmod(mod, mod, p);
               temp *= 2;
            if (mod != p - 1 && temp % 2 == 0)
               return false
            else
               return true
End

उदाहरण कोड

#include <iostream>
#include<stdlib.h>
#define ll long long
using namespace std;
ll mulmod(ll a, ll b, ll m)//It returns true if number is prime otherwise false {
   ll x = 0,y = a % m;
   while (b > 0) {
      if (b % 2 == 1) {
         x = (x + y) % m;
      }
      y = (y * 2) % m;
      b /= 2;
   }
   return x % m;
}

ll modulo(ll base, ll e, ll m) {
   ll x = 1;
   ll y = base;
   while (e > 0) {
      if (e % 2 == 1)
         x = (x * y) % m;
         y = (y * y) % m;
         e = e / 2;
   }
   return x % m;
}

bool Miller(ll p, int iteration) {
   if (p < 2) {
      return false;
   }
   if (p != 2 && p % 2==0) {
      return false;
   }
   ll s = p - 1;
   while (s % 2 == 0) {
      s /= 2;
   }
   for (int i = 0; i < iteration; i++) {
      ll a = rand() % (p - 1) + 1, temp = s;
      ll mod = modulo(a, temp, p);
      while (temp != p - 1 && mod != 1 && mod != p - 1) {
         mod = mulmod(mod, mod, p);
         temp *= 2;
      }
      if (mod != p - 1 && temp % 2 == 0) {
         return false;
      }
   }
   return true;
}

int main() {
   int iteration = 10;
   ll num;
   cout<<"Enter integer to test primality: ";
   cin>>num;
   if (Miller(num, iteration))
      cout<<num<<" is prime"<<endl;
   else
      cout<<num<<" is not prime"<<endl;
   return 0;
}

आउटपुट

Enter integer to test primality: 26
26 is not prime

  1. C++ प्रोग्राम यह जांचने के लिए कि कोई नंबर प्राइम है या नहीं

    एक अभाज्य संख्या एक पूर्ण संख्या होती है जो एक से बड़ी होती है और एक अभाज्य संख्या का एकमात्र गुणनखंड एक और स्वयं होना चाहिए। कुछ पहली अभाज्य संख्याएँ हैं - 2, 3, 5, 7, 11, 13 ,17 कोई संख्या अभाज्य है या नहीं यह जाँचने का कार्यक्रम इस प्रकार है। उदाहरण #include <iostream> using namespace std;

  1. दिया गया नंबर हैप्पी नंबर है या नहीं यह जांचने के लिए पायथन प्रोग्राम

    जब यह जांचना आवश्यक हो कि दी गई संख्या एक खुश संख्या है, तो % ऑपरेटर, // ऑपरेटर और + ऑपरेटर का उपयोग किया जा सकता है। एक हैप्पी नंबर वह होता है जो 1 के रूप में समाप्त होता है, जब इसे संख्या में प्रत्येक अंक के वर्ग के योग से बदल दिया जाता है। नीचे उसी के लिए एक प्रदर्शन है - उदाहरण def check_happy

  1. पायथन प्रोग्राम यह जाँचने के लिए कि क्या दिया गया नंबर एक डिसैरियम नंबर है

    जब यह जांचने की आवश्यकता होती है कि क्या दिया गया नंबर एक डिसैरियम नंबर है, तो उनकी संबंधित स्थिति में संचालित अंकों के योग की गणना की जाती है। इससे पहले संख्या में मौजूद अंकों की संख्या निर्धारित की जाती है। डिसैरियम नंबर वह होता है, जहां उसके अंकों का योग उनकी संबंधित स्थिति की शक्ति से मूल संख्य