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

दो संख्याओं के जोड़े जिनका योग अभाज्य संख्या है और n से कम है, उनकी गणना करने का C++ प्रोग्राम

समस्या विवरण

हमें एक धनात्मक संख्या n दी गई है। लक्ष्य उन जोड़ों (i, j) की गणना करना है जहाँ:

  • i + j अभाज्य संख्या है
  • i + j < n
  • i != j और i, j ≥ 1

उदाहरण

इनपुट: n = 7

आउटपुट: 3

व्याख्या: जोड़े: (1,2), (1,4), (2,3)। योग: 3, 5, 5 — सभी अभाज्य और 7 से कम।

इनपुट: n = 10

आउटपुट: 6

व्याख्या: जोड़े: (1,2), (1,4), (2,3), (1,6), (2,5), (3,4)। योग: 3, 5, 5, 7, 7, 7।

दृष्टिकोण

हम n से कम सभी अभाज्य संख्याएँ खोजने के लिए सुंदरम की छलनी (Sieve of Sundaram) का उपयोग करते हैं। प्रत्येक विषम संख्या temp के लिए, जिन जोड़ों का योग temp होता है, उनकी संख्या temp/2 होती है। 2 को छोड़कर सभी अभाज्य संख्याएँ विषम होती हैं, इसलिए प्रत्येक अभाज्य संख्या temp < n के लिए हम temp/2 को गणना में जोड़ते हैं।

एल्गोरिदम

  1. चर n लें
  2. फंक्शन prime_pair(int n) जोड़ों की संख्या लौटाता है
  3. प्रारंभिक गणना = 0
  4. सुंदरम की छलनी 2*n+2 से कम अभाज्य संख्याएँ उत्पन्न करती है, इसलिए n को आधा करके temp_2 में स्टोर करें
  5. बूलियन ऐरे check[] बनाएँ और false से आरंभ करें
  6. फंक्शन check_prime() से i+j+2*i*j रूप की संख्याओं को true चिह्नित करें
  7. check[] को पार करें: प्रत्येक check[i] == false के लिए, अभाज्य संख्या temp = 2*i + 1
  8. count += temp/2 जोड़ें
  9. गणना लौटाएँ

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

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

void check_prime(bool check[], int temp) {
    for (int i = 1; i <= temp; i++) {
        for (int j = i; (i + j + 2*i*j) <= temp; j++) {
            check[i + j + 2*i*j] = true;
        }
    }
}

int prime_pair(int n) {
    int count = 0;
    int temp_2 = (n - 2) / 2;
    vector<bool> check(temp_2 + 1, false);
    check_prime(check.data(), temp_2);
    
    for (int i = 1; i <= temp_2; i++) {
        if (!check[i]) {
            int temp = 2*i + 1;
            count += (temp / 2);
        }
    }
    return count;
}

int main() {
    int n = 10;
    cout << "Count: " << prime_pair(n);
    return 0;
}

आउटपुट

Count: 6
  1. - C++ में कॉलम योग पंक्ति योग से अधिक होने वाले युग्मों की गिनती

    हमें NxN आकार का एक मैट्रिक्स दिया गया है। लक्ष्य उन सभी वैध इंडेक्स युग्मों (i, j) की गिनती ढूंढना है जैसे कि कॉलम j के तत्वों का योग पंक्ति i के तत्वों के योग से बड़ा है। हम इसे मैट्रिक्स को पार करके और प्रत्येक पंक्ति और कॉलम के तत्वों के योग की गणना करके करेंगे। प्रत्येक पंक्ति के तत्वों के योग

  1. - C++ में किसी संख्या से कम सभी अभाज्य चौगुनी (Prime Quadruplet) प्रिंट करें

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है, और हमें N से कम या बराबर सभी अभाज्य चौगुनी (Prime Quadruplet) प्रिंट करनी हैं। अभाज्य चौगुनी चार अभाज्य संख्याओं का समूह है जिसकी गणना {p, p+2, p+6, p+8} के रूप में की जाती है। उदाहरण - 5, 7, 11, 13। समस्या को समझने के लिए एक उदाहरण लेते हैं - इ

  1. - C++ में Y से कम संख्याओं वाले न्यूनतम सेटों की संख्या

    समस्या कथन लगातार अंकों की एक स्ट्रिंग और एक संख्या Y दी गई है। न्यूनतम सेटों की संख्या ढूंढनी है ताकि प्रत्येक सेट निम्न नियमों का पालन करे: सेट में लगातार संख्याएं होनी चाहिए कोई अंक एक से अधिक बार उपयोग नहीं किया जा सकता सेट में संख्या Y से अधिक नहीं होनी चाहिए उदाहरण यदि str = 123