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

C++ . में प्रिमलिटी टेस्ट

इस समस्या में, हमें एक नंबर N दिया जाता है और हमारा काम यह जांचना है कि यह एक अभाज्य संख्या है या नहीं।

प्राथमिकता परीक्षण s एल्गोरिथम जिसका उपयोग यह जांचने के लिए किया जाता है कि दी गई संख्या अभाज्य है या नहीं।

अभाज्य संख्या एक ऐसी संख्या है जिसे केवल स्वयं से विभाजित किया जा सकता है। उदाहरण :2, 3, 5, 7.

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

Input: 11
Output: Yes

किसी संख्या के प्रारंभिक परीक्षण की जांच करने के लिए कई तरीके हैं।

प्राइमलिटी की जांच करने का एक आसान तरीका यह है कि संख्या के विभाजन को N से कम की सभी संख्याओं से विभाजित किया जाए। यदि कोई संख्या N को विभाजित करती है, तो वह अभाज्य संख्या नहीं है।

सभी i =2 - n-1 के लिए जाँच करें। अगर n/i ==0, यह एक अभाज्य संख्या नहीं है।

एल्गोरिथम में ये छोटे-छोटे बदलाव करके इस पद्धति को और अधिक कुशल बनाया जा सकता है।

सबसे पहले, हमें n के बजाय n तक के मानों की जांच करनी चाहिए। यह बहुत सारे लूप मानों को बचाएगा। √n में n के सभी संभावित कारकों के मान शामिल हैं।

अन्य परिवर्तन 2 और 3 से विभाजन की जाँच करना हो सकता है। फिर 5 से n तक लूप मानों की जाँच करना।

इस एल्गोरिथम के कार्यान्वयन को दिखाने के लिए कार्यक्रम

उदाहरण

#include <iostream>
using namespace std;
bool isPrimeNumber(int n){
   if (n <= 1)
      return false;
   if (n <= 3)
   return true;
   if (n % 2 == 0 || n % 3 == 0)
      return false;
   for (int i = 5; i * i <= n; i = i + 6)
   if (n % i == 0 || n % (i + 2) == 0)
   return false;
   return true;
}
int main() {
   int n = 341;
   if (isPrimeNumber(n))
      cout<<n<<" is prime Number.";
   else
      cout<<n<<" is not prime Number.";
   return 0;
}

आउटपुट

341 is not prime Number.

Fermat की विधि का उपयोग करके किसी संख्या की प्रारंभिकता की जांच करने के लिए अन्य अधिक प्रभावी तरीका है जो फ़र्मेट के छोटे प्रमेय पर आधारित है।

फर्मेट की छोटी प्रमेय एक अभाज्य संख्या N के लिए, x का प्रत्येक मान (1, n-1) से संबंधित है। नीचे सच है,

a n-1 ≡ 1 (mod n)
or
a n-1 % n = 1

इस प्रमेय के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

उदाहरण

#include <iostream>
#include <math.h>
using namespace std;
int power(int a, unsigned int n, int p) {
   int res = 1;
   a = a % p;
   while (n > 0){
      if (n & 1)
      res = (res*a) % p;
      n = n/2;
      a = (a*a) % p;
   }
   return res;
}
int gcd(int a, int b) {
   if(a < b)
      return gcd(b, a);
   else if(a%b == 0)
      return b;
   else return gcd(b, a%b);
}
bool isPrime(unsigned int n, int k) {
   if (n <= 1 || n == 4) return false;
   if (n <= 3) return true;
   while (k>0){
      int a = 2 + rand()%(n-4);
      if (gcd(n, a) != 1)
         return false;
      if (power(a, n-1, n) != 1)
         return false;
      k--;
   }
   return true;
}
int main() {
   int k = 3, n = 23;
   if(isPrime(n, k)){
      cout<<n<<" is a prime number";
   }
   else
      cout<<n<<" is not a prime number";
   return 0;
}

आउटपुट

23 is a prime number

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

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

  1. सी++ में इनकैप्सुलेशन

    Encapsulation डेटा और विधियों को एक साथ लाता है जो डेटा को एक घटक में हेरफेर करता है और उन्हें बाहरी हस्तक्षेप से बचाता है। संक्षेप में, एनकैप्सुलेशन में डेटा के साथ-साथ डेटा का उपयोग करने वाले कार्यों को बंडल करना शामिल है। डेटा इनकैप्सुलेशन डेटा छिपाने की बहुत महत्वपूर्ण अवधारणा की ओर ले जाता है।

  1. C++ . में पहचानकर्ता

    C++ पहचानकर्ता एक ऐसा नाम है जिसका उपयोग किसी चर, फ़ंक्शन, वर्ग, मॉड्यूल, या किसी अन्य उपयोगकर्ता-परिभाषित आइटम की पहचान करने के लिए किया जाता है। एक पहचानकर्ता अक्षर A से Z या a से z या अंडरस्कोर (_) से शुरू होता है और उसके बाद शून्य या अधिक अक्षर, अंडरस्कोर और अंक (0 से 9) होते हैं। C++ पहचानकर्त