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

C++-এ প্রাইম পয়েন্ট (যে ইনডেক্সে সংখ্যা ভাগ করলে দুটি প্রাইম হয়)


এই সমস্যায় একটি সংখ্যা N দেওয়া আছে। সংখ্যার সকল প্রাইম পয়েন্ট প্রিন্ট করতে হবে, না থাকলে -1 প্রিন্ট করব।

প্রাইম পয়েন্ট হলো সেই ইনডেক্স ভ্যালু যা সংখ্যকে দুটি প্রাইম সংখ্যায় ভাগ করে—বামপাশে একটি এবং ডানপাশে অন্যটি।

উদাহরণ:

ইনপুট: 2359 আউটপুট: 1 ব্যাখ্যা: ইনডেক্স ১-এ ভাগ করলে ২ এবং ৫৯ মিলে, যেন দুটোই প্রাইম।

সমাধান: সংখ্যার বাম-ডান বিভাজন সম্ভব কিনা চেক করব। বৈধ হলে সব কোम्बিনেশন জেনারেট করে প্রাইম কিনা যাচাই করব। প্রাইম হলে ইনডেক্স প্রিন্ট করব।

উদাহরণ

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

int countDigits(int n) {
    int count = 0;
    while (n > 0){
        count++;
        n = n/10;
    }
    return count;
}

int checkPrime(int n) {
    if (n <= 1)
        return -1;
    if (n <= 3)
        return 0;
    if (n%2 == 0 || n%3 == 0)
        return -1;
    for (int i=5; i*i<=n; i=i+6)
        if (n%i == 0 || n%(i+2) == 0)
            return -1;
    return 0;
}

void primePoints(int n) {
    int count = countDigits(n);
    if (count==1 || count==2){
        cout << "-1";
        return;
    }
    bool found = false;
    for (int i=1; i<(count-1); i++){
        int left = n / ((int)pow(10,count-i));
        int right = n % ((int)pow(10,count-i-1));
        if (checkPrime(left) == 0 && checkPrime(right) == 0){
            cout << i << "\t";
            found = true;
        }
    }
    if (found == false)
        cout << "-1";
}

int main() {
    int N = 2359;
    cout << "All prime divisions of number " << N << " are :\n";
    primePoints(N);
    return 0;
}

আউটপুট

All prime divisions of number 2359 are : 1

  1. C++ ব্যবহার করে মেরসেন প্রাইম সংখ্যা বের করা

  2. C++-এ অ্যারিথমেটিক নম্বর

  3. C++ প্রোগ্রাম: গ্রাফে আর্টিকুলেশন পয়েন্ট (Articulation Points) গণনা করা

  4. C++-এ CHAR_BIT