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

सी ++ में प्राइम योग के साथ सबएरे गिनें

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

आइए उदाहरणों के साथ समझते हैं

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

आउटपुट - प्राइम योग के साथ उपसरणियों की संख्या हैं:3

स्पष्टीकरण - उप-अभाज्य होंगे:{ 3,2} योग =5 अभाज्य, {3,5,3} योग =11 अभाज्य और {3,5,3,2} योग 13 अभाज्य है।

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

आउटपुट - अभाज्य योग के साथ उपसरणियों की संख्या हैं:0

स्पष्टीकरण - सभी उपसरणियों में गैर-अभाज्य योग होते हैं। {2,4}=6, {4,6}=10

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

हम सभी अभाज्य संख्याओं को एक छलनी का उपयोग करके अधिकतम मान 107 से कम पाएंगे और इसे वेक्टर <बूल> चेक में संग्रहीत करेंगे। यदि कोई संख्या अभाज्य है तो जाँचें [i] सत्य है और असत्य है। फिर लूप के लिए दो का उपयोग करके सरणी को पार करें, सबअरे के योग में तत्वों को जोड़ते रहें और जांचें कि क्या यह चेक [योग] का उपयोग करके प्रमुख है। यदि हाँ, तो अभाज्य योग के साथ उपसरणियों की संख्या बढ़ाएँ।

  • धनात्मक पूर्णांकों की एक सरणी arr[] लें।

  • समारोह sub_prime(int arr[], int size) सरणी लेता है और योग के साथ उप-सरणी की गिनती देता है।

  • प्रारंभिक गणना 0 के रूप में लें।

  • प्रारंभ करें temp=pow(10,7) अधिकतम मान के रूप में।

  • सदिश जांच को सही से प्रारंभ करें।

  • check[0] और check[1] झूठे हैं क्योंकि वे गैर-प्राइम हैं।

  • i=2 से i*i

  • अब सदिश जाँच [i] सत्य है यदि i अभाज्य है और असत्य है।

  • दो फॉर लूप्स का उपयोग करके फिर से ट्रैवर्स ऐरे।

  • सबएरे में तत्वों के योग के रूप में चर कुल लें। गिरफ्तार [i] गिरफ्तार करने के लिए [जे]। जहां i=0 से i

  • यदि कोई चेक [कुल] सत्य है। (योग योग अभाज्य है)। वेतन वृद्धि की संख्या।

  • परिणाम के रूप में सभी लूपों के अंत में वापसी की गणना करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int sub_prime(int arr[], int size){
   int count = 0;
   int temp = int(pow(10, 7));
   vector 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++ में योग S के साथ अभाज्य P के बाद अभाज्य संख्याएँ

    इस समस्या में, हमें तीन संख्याएँ दी गई हैं, योग S, अभाज्य P, और N। हमारा कार्य P से बड़ी सभी N अभाज्य संख्याओं का पता लगाना है जिनका योग S के बराबर है। हमारी समस्या को समझने के लिए एक उदाहरण लेते हैं Input: N = 2, P = 5, S = 18 Output: 7 11 Explanation: Prime numbers greater than 5 : 7 11 13 Sum =

  1. C++ में 0 योग के साथ सभी उप-सरणी मुद्रित करें

    इस समस्या में, हमें पूर्णांक मानों की एक सरणी दी जाती है और हमें इस सरणी से उन सभी उप-सरणी को प्रिंट करना होता है जिनका योग 0 के बराबर होता है। आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं, Input: array = [-5, 0, 2, 3, -3, 4, -1] Output: Subarray with sum 0 is from 1 to 4. Subarray with

  1. C++ में आकार K के M गैर-अतिव्यापी उप-सरणी का अधिकतम योग

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