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

C++-এ N কে ০ করতে হলে প্রাইম ভাজক বিয়োগের অপারেশন সংখ্যা গণনা


আমাদের একটি ধনাত্মক ইন্টিজার N দেওয়া আছে। লক্ষ্য হল N-কে ০ করার জন্য কতটি অপারেশন লাগবে। প্রতিটি অপারেশনে N = N - P করা হয়, যেখানে P হল N-এর ন্যূনতম প্রাইম ভাজক (smallest prime divisor)।

উদাহরণ

ইনপুট: N = 17

আউটপুট: ১

ব্যাখ্যা: ১৭ প্রাইম, তাই ন্যূনতম প্রাইম ভাজক ১৭। একবার বিয়োগে ০।

ইনপুট: N = 20

আউটপুট: ১০

ব্যাখ্যা: ন্যূনতম প্রাইম ভাজক ২। বারবার ২ বিয়োগ করলে: ২০→১৮→১৬→...→২→০। মোট ১০ বার।

অ্যালগরিদম

  • সব জোড় N-এর ন্যূনতম প্রাইম ভাজক ২। ২ বিয়োগ করলে আবার জোড় হয়।
  • বিজোড় N-এর ন্যূনতম প্রাইম ভাজক বিজোড়। বিজোড় থেকে বিজোড় বিয়োগ করলে জোড় হয়, এরপর ২-দিয়ে চলে।
  • i=2 থেকে i*i <= N পর্যন্ত চেক করুন N%i==0। পাওয়া গেলে সেটিই ন্যূনতম প্রাইম ভাজক।
  • পাওয়া না গেলে N প্রাইম, তাই i = N।
  • মোট অপারেশন = 1 + (N - i) / 2।
  • C++ বাস্তবায়ন

    #include <bits/stdc++.h>
    using namespace std;
    
    int N_to_Zero(int N) {
        int i = 2;
        while ((i * i) <= N && (N % i)) {
            i++;
        }
        if ((i * i) > N) i = N;
        return 1 + (N - i) / 2;
    }
    
    int main() {
        int N = 10;
        cout << "Count of operations of the given type required to reduce N to 0 are: " 
             << N_to_Zero(N);
        return 0;
    }

    আউটপুট

    Count of operations of the given type required to reduce N to 0 are: 5
  1. বাইনারি ট্রিতে ২-এর ঘাত বিশিষ্ট ওজন সম্পন্ন নোড গণনা C++-এ

  2. C++-এ গ্রিডের মধ্যে নির্দিষ্ট দিকচালনের সম্ভাব্য মোভ সংখ্যা গণনা

  3. C++-এ সেটের MEX x করার জন্য মিনিমাম অপারেশন

  4. C++ প্রোগ্রাম: দেওয়া ইটারেটর টাইপ খুঁজে বের করা