কম্পিউটার টিউটোরিয়াল

C++-এ প্রাইম যোগফল বিশিষ্ট সাবঅ্যারে গণনা


আমাদের একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া আছে। লক্ষ্য হলো এমন সাবঅ্যারে খুঁজে বের করা যাতে প্রতিটি সাবঅ্যারের যোগফল প্রাইম (prime) সংখ্যা হয়। যদি অ্যারে {1,2,3,4} হয়, তবে সাবঅ্যারে: {1,2}, {2,3}, {3,4}। মোট ৩টি।

উদাহরণ দিয়ে বুঝি

ইনপুট − arr[] = {1,3,5,3,2 };

আউটপুট − প্রাইম যোগফল বিশিষ্ট সাবঅ্যারে: ৩

ব্যাখ্যা − সাবঅ্যারে: {3,2} যোগফল=৫ প্রাইম, {3,5,3} যোগফল=১১ প্রাইম, {3,5,3,2} যোগফল=১৩ প্রাইম।

ইনপুট − arr[] = {2,4,6 };

আউটপুট − প্রাইম যোগফল বিশিষ্ট সাবঅ্যারে: ০

ব্যাখ্যা − সব সাবঅ্যারের যোগফল নন-প্রাইম। {2,4}=৬, {4,6}=১০।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

সিভ (sieve) ব্যবহার করে ১০⁷ পর্যন্ত সব প্রাইম সংখ্যা বের করে vector<bool> check-এ স্টোর করব। check[i] = true হলে প্রাইম। এরপর দুটি for লুপ দিয়ে সাবঅ্যারের যোগফল বের করে check[sum] দিয়ে প্রাইম কিনা চেক করব। প্রাইম হলে কাউন্ট বাড়াব।

  • অ্যারে arr[] নিন।
  • sub_prime(int arr[], int size) ফাংশন অ্যারে নিয়ে প্রাইম যোগফল সাবঅ্যারে কাউন্ট রিটার্ন করে।
  • প্রাথমিক কাউন্ট ০।
  • temp = pow(10,7) ম্যাক্সিমাম ভ্যালু।
  • vector check(temp+1, true) ইনিশিয়ালাইজ করুন।
  • check[0] এবং check[1] = false (নন-প্রাইম)।
  • i=2 থেকে i*i <= temp পর্যন্ত সিভ চালান।
  • এখন check[i] true হলে প্রাইম।
  • আরেকবার দুটি লুপে অ্যারে ট্রাভার্স: total = arr[i] থেকে arr[j] যোগ করুন। check[total] true হলে count++।
  • count রিটার্ন করুন।

উদাহরণ

#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++-এ d-ডিজিটের ধনাত্মক পূর্ণসংখ্যা যেগুলোতে ০ ডিজিট থাকে (Count d-digit Numbers with Digit 0)

  2. C++-এ প্রাইম P-এর পরের প্রাইম নম্বর जिनका যোগফল S

  3. শূন্য সম যোগফল वाले সব সাবঅ্যারে প্রিন্ট করা C++-তে

  4. সি++ প্রোগ্রাম: M নন-ওভারল্যাপিং সাবঅ্যারে (সাইজ K) এর সর্বোচ্চ যোগফল