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

C++ में अभाज्य योग वाले सबएरे की गिनती


हमें धनात्मक पूर्णांकों की एक सरणी दी गई है। लक्ष्य सरणी में संख्याओं के उन सबएरे को ढूंढना है जिनमें प्रत्येक सबएरे का योग अभाज्य हो। यदि सरणी {1,2,3,4} है। तो सबएरे होंगे {1,2}, {2,3}, {3,4}। ऐसे सबएरे की संख्या 3 है।

उदाहरण सहित समझ

इनपुट - arr[] = {1,3,5,3,2 };

आउटपुट - अभाज्य योग वाले सबएरे की संख्या: 3

व्याख्या - सबएरे होंगे: {3,2} योग=5 अभाज्य, {3,5,3} योग=11 अभाज्य और {3,5,3,2} योग 13 अभाज्य।

इनपुट - arr[] = {2,4,6 };

आउटपुट - अभाज्य योग वाले सबएरे की संख्या: 0

व्याख्या - सभी सबएरे के गैर-अभाज्य योग हैं। {2,4}=6, {4,6}=10

प्रोग्राम में उपयोग किया गया दृष्टिकोण

हम अधिकतम मान 10^7 से कम सभी अभाज्य संख्याओं को छलनी (sieve) का उपयोग करके ढूंढेंगे और इसे vector<bool> check में संग्रहीत करेंगे। यदि कोई संख्या अभाज्य है तो check[i] सही है अन्यथा गलत। फिर दो फॉर लूप का उपयोग करके सरणी को ट्रैवर्स करें, सबएरे के योग में तत्व जोड़ते रहें और check[sum] का उपयोग करके जांचें कि क्या यह अभाज्य है। यदि हां तो अभाज्य योग वाले सबएरे के लिए काउंट बढ़ाएँ।

  • धनात्मक पूर्णांकों की एक सरणी arr[] लें।
  • फंक्शन sub_prime(int arr[], int size) सरणी लेता है और योग अभाज्य होने वाले सबएरे की संख्या लौटाता है।
  • प्रारंभिक काउंट 0 लें।
  • temp = pow(10,7) को अधिकतम मान के रूप में आरंभ करें।
  • check वेक्टर को सही के साथ आरंभ करें।
  • check[0] और check[1] गलत हैं क्योंकि वे गैर-अभाज्य हैं।
  • i=2 से i*i<=temp तक। सभी संख्याएँ गलत होंगी क्योंकि ये गैर-अभाज्य होंगी।
  • अब वेक्टर check[i] सही है यदि i अभाज्य है अन्यथा गलत।
  • दो फॉर लूप का उपयोग करके सरणी को फिर से ट्रैवर्स करें।
  • total चर को सबएरे में तत्वों के योग के रूप में लें। arr[i] से arr[j]। जहां i=0 से i<size-1 और j=i+1 से j<size।
  • यदि कोई check[total] सही है। (योग कुल अभाज्य है)। काउंट बढ़ाएँ।
  • सभी लूप के अंत में परिणाम के रूप में काउंट लौटाएँ।

उदाहरण

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

int sub_prime(int arr[], int size) {
    int count = 0;
    int temp = int(pow(10, 7));
    vector<bool> check(temp + 1, true);
    check[0] = false;
    check[1] = false;
    for (int i = 2; i * i <= temp; i++) {
        if (check[i] == true) {
            for (int j = i * 2; j <= temp; j += i) {
                check[j] = false;
            }
        }
    }
    for (int i = 0; i < size - 1; ++i) {
        int total = arr[i];
        for (int j = i + 1; j < size; ++j) {
            total += arr[j];
            if (check[total]) {
                ++count;
            }
        }
    }
    return count;
}

int main() {
    int arr[] = { 3, 5, 1, 9, 5 };
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Count of subarrays with Prime sum are: " << sub_prime(arr, size);
    return 0;
}

आउटपुट

Count of subarrays with Prime sum are: 1
  1. - C++ में अभाज्य संख्या P के बाद N अभाज्य संख्याएं जिनका योग S हो

    इस समस्या में, हमें तीन संख्याएं दी गई हैं: योग S, अभाज्य P, और N। हमारा कार्य P से बड़ी उन N अभाज्य संख्याओं को ढूंढना है जिनका योग S के बराबर हो। आइए एक उदाहरण से समझते हैं: इनपुट: N = 2, P = 5, S = 18 आउटपुट: 7 11 व्याख्या: 5 से बड़ी अभाज्य संख्याएं: 7, 11, 13। योग = 7 + 11 = 18 इस समस्या को हल

  1. - C++ में योग शून्य वाले सभी उपसरणी (Subarrays) प्रिंट करें

    इस समस्या में, हमें पूर्णांक मानों की एक सरणी दी गई है और हमें इस सरणी से उन सभी उपसरणी को प्रिंट करना है जिनका योग 0 के बराबर है। विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं, इनपुट: सरणी = [-5, 0, 2, 3, -3, 4, -1] आउटपुट: इंडेक्स 1 से 4 तक उपसरणी का योग 0 है। इंडेक्स 5 से 7 तक उपसरणी का यो

  1. - C++ में आकार K के M नॉन-ओवरलैपिंग सबएरे का अधिकतम योग

    समस्या कथन एक ऐरे और दो संख्याएं M और K दी गई हैं। हमें ऐरे में आकार K के अधिकतम M सबएरे का योग ढूंढना है (नॉन-ओवरलैपिंग)। (ऐरे का क्रम अपरिवर्तित रहता है)। K सबएरे का आकार है और M सबएरे की संख्या है। यह माना जा सकता है कि ऐरे का आकार m*k से अधिक है। यदि कुल ऐरे का आकार k का गुणक नहीं है, तो हम आंश