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

C++ প্রোগ্রাম: সেগমেন্টেড ছাঁনি বাস্তবায়ন করে নির্দিষ্ট পরিসরের মৌলিক সংখ্যা তৈরি


এটি সেগমেন্টেড ছাঁনি (Segmented Sieve) বাস্তবায়ন করে দত্তক পরিসরের মৌলিক সংখ্যা তৈরি করার C++ প্রোগ্রাম। সেগমেন্টেড ছাঁনি প্রথমে সিম্পল ছাঁনি ব্যবহার করে √n পর্যন্ত মৌলিক সংখ্যা বের করে। এই অ্যালগরিদমের মূল ধারণা হল [0 ... n-1] পরিসরকে বিভিন্ন সেগমেন্টে ভাগ করে প্রতিটি সেগমেন্টে মৌলিক সংখ্যা একে একে গণনা করা।

অ্যালগরিদম

শুরু
    সিম্পল এরাটোस्थেনিস ছাঁনি ব্যবহার করে লিমিটের চেয়ে ছোট সব মৌলিক সংখ্যা বের করার ফাংশন তৈরি করুন
    সেগমেন্টেড ছাঁনি ব্যবহার করে দত্তক পরিসরের সব মৌলিক সংখ্যা বের করুন
    A) সিম্পল ছাঁনি ব্যবহার করে high-এর বর্গমূল পর্যন্ত সব মৌলিক সংখ্যা গণনা করুন
    B) দত্তক পরিসরের এলিমেন্ট সংখ্যা গণনা করুন
    C) শুধু [low, high] এর জন্য বুলিয়ান অ্যারে ঘোষণা করুন
    D) [low ... high]-এ prime[i]-এর গুণফল (prime[i]-দ্বারা বিভাজ্য) ন্যূনতম সংখ্যা বের করুন
    E) [low ... high]-এ prime[i]-এর গুণফলগুলো চিহ্নিত করুন
    F) পরিসরে যেসব সংখ্যা চিহ্নিত নয়, সেগুলোই মৌলিক
শেষ

উদাহরণ কোড

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

void simpleSieve(int lmt, vector<int>& prime) {
    bool mark[lmt + 1];
    memset(mark, false, sizeof(mark));
    for (int i = 2; i <= lmt; ++i) {
        if (mark[i] == false) {
            prime.push_back(i);
            for (int j = i; j <= lmt; j += i)
                mark[j] = true;
        }
    }
}

void PrimeInRange(int low, int high) {
    int lmt = floor(sqrt(high)) + 1;
    vector<int> prime;
    simpleSieve(lmt, prime);
    int n = high - low + 1;
    bool mark[n + 1];
    memset(mark, false, sizeof(mark));
    for (int i = 0; i < prime.size(); i++) {
        int lowLim = floor(low / prime[i]) * prime[i];
        if (lowLim < low)
            lowLim += prime[i];
        for (int j = lowLim; j <= high; j += prime[i])
            mark[j - low] = true;
    }
    for (int i = low; i <= high; i++)
        if (!mark[i - low])
            cout << i << " ";
}

int main() {
    int low = 10, high = 50;
    PrimeInRange(low, high);
    return 0;
}

আউটপুট

11 13 17 19 23 29 31 37 41 43 47
  1. C++ প্রোগ্রাম: অ্যাটকিনের ছাঁনি বাস্তবায়ন করে নির্দিষ্ট পরিসরের মৌলিক সংখ্যা তৈরি

  2. C++ প্রোগ্রাম: এরাটোস্থেনিসের ছাঁনি বাস্তবায়ন করে নির্দিষ্ট পরিসরের মৌলিক সংখ্যা তৈরি

  3. C++ প্রোগ্রাম: হুইল ছাঁনি বাস্তবায়ন করে নির্দিষ্ট পরিসরের মৌলিক সংখ্যা তৈরি

  4. দুই अन्तরালের মাঝপথে প্রাইম নম্বর প্রদর্শনের C++ প্রোগ্রাম (ফাংশন ভিন্ন নাম)