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

C++ प्रोग्राम सोलोवे-स्ट्रासेन प्राइमैलिटी टेस्ट लागू करने के लिए


सोलोवे-स्ट्रासेन प्राइमैलिटी टेस्ट का उपयोग यह जांचने के लिए किया जाता है कि कोई संख्या कम्पोजिट है या संभावित रूप से प्राइम।

एल्गोरिदम

  1. मोड्यूलो फंक्शन: बाइनरी एक्सपोनेंशिएशन के लिए।
  2. जैकोबियन फंक्शन: दी गई संख्या का जैकोबियन सिंबल कैलकुलेट करने के लिए।
  3. सोलोवेस्ट्रासेन फंक्शन: प्राइमैलिटी टेस्ट करने के लिए।

C++ कार्यान्वयन

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

long modulo(long base, long exp, long mod) {
    long a = 1;
    long b = base;
    while (exp > 0) {
        if (exp % 2 == 1)
            a = (a * b) % mod;
        b = (b * b) % mod;
        exp = exp / 2;
    }
    return a % mod;
}

int Jacobian(long a, long n) {
    if (!a) return 0;
    int ans = 1;
    if (a < 0) {
        a = -a;
        if (n % 4 == 3) ans = -ans;
    }
    if (a == 1) return ans;
    while (a) {
        if (a < 0) {
            a = -a;
            if (n % 4 == 3) ans = -ans;
        }
        while (a % 2 == 0) {
            a = a / 2;
            if (n % 8 == 3 || n % 8 == 5) ans = -ans;
        }
        swap(a, n);
        if (a % 4 == 3 && n % 4 == 3) ans = -ans;
        a = a % n;
        if (a > n / 2) a = a - n;
    }
    if (n == 1) return ans;
    return 0;
}

bool SolovayStrassen(long p, int iterations) {
    if (p < 2) return false;
    if (p != 2 && p % 2 == 0) return false;
    
    for (int i = 0; i < iterations; i++) {
        long a = rand() % (p - 1) + 1;
        long jacob = (p + Jacobian(a, p)) % p;
        long mod = modulo(a, (p - 1) / 2, p);
        if (!jacob || mod != jacob)
            return false;
    }
    return true;
}

int main() {
    int iter = 50;
    long num1, num2;
    cout << "Enter the first number: ";
    cin >> num1;
    if (SolovayStrassen(num1, iter))
        cout << num1 << " is a prime number\n";
    else
        cout << num1 << " is a composite number\n";
    
    cout << "Enter another number: ";
    cin >> num2;
    if (SolovayStrassen(num2, iter))
        cout << num2 << " is a prime number\n";
    else
        cout << num2 << " is a composite number\n";
    return 0;
}

आउटपुट

Enter the first number: 24
24 is a composite number
Enter another number: 23
23 is a prime number
  1. - C++ प्रोग्राम: जांचें कि संख्या अभाज्य (Prime) है या नहीं

    परिचयएक अभाज्य संख्या एक पूर्ण संख्या है जो एक से बड़ी होती है और एक अभाज्य संख्या के केवल दो गुणनखंड होने चाहिए: एक और स्वयं। कुछ पहली अभाज्य संख्याएं हैं - 2, 3, 5, 7, 11, 13, 17 उदाहरण#include <iostream> using namespace std; int main() { int n = 17, i, flag = 0; for (i = 2; i <=

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

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

  1. - दी गई संख्या डिसैरियम नंबर है या नहीं जांचने के लिए Python प्रोग्राम

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