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

C++ প্রোগ্রাম: একটি সংখ্যাকে নিজের চেয়ে ছোট সংখ্যাগুলোর যোগফল হিসেবে লিখার পদ্ধতির সংখ্যা বের করা

এই প্রোগ্রামটি একটি সংখ্যা n কে নিজের চেয়ে ছোট ধনাত্মক পূর্ণসংখ্যাগুলোর যোগফল হিসেবে কতভাবে প্রকাশ করা যায় (integer partition) সেটি গণনা করে। এটি পার্টিশন ফাংশন p(n) এর মান বের করে।

এলগরিদম

একটি অ্যারে p ব্যবহার করে বর্তমান পার্টিশন সংরক্ষণ করা হয়। প্রথমে p[0] = n। তারপর ইটারেটিভভাবে পার্টিশন জেনারেট করা হয়: ডানদিকের সবচেয়ে বড় এলিমেন্ট (যা ১ নয়) খুঁজে ১ কমানো হয়, বাকি অংশ নতুন পার্টিশন হিসেবে বামদিকেই বসানো হয়। প্রক্রিয়া চলবে যতক্ষণ না সব এলিমেন্ট ১ হয়ে যায়।

উদাহরণ কোড

#include <iostream>
using namespace std;

int partitionCount(int n) {
    int p[n], k = 0, count = -1;
    p[k] = n;
    while (true) {
        count++;
        int rem = 0;
        while (k >= 0 && p[k] == 1) {
            rem += p[k];
            k--;
        }
        if (k < 0) return count;
        p[k]--;
        rem++;
        while (rem > p[k]) {
            p[k + 1] = p[k];
            rem -= p[k];
            k++;
        }
        p[k + 1] = rem;
        k++;
    }
}

int main() {
    int n;
    cout << "Enter number for partition counting: ";
    cin >> n;
    if (n <= 0) {
        cout << "Invalid value of n";
        return 1;
    }
    int c = partitionCount(n);
    cout << "The number of partitions: " << c;
    return 0;
}

আউটপুট

Enter number for partition counting: 7
The number of partitions: 14

নোট: n=7-র পার্টিশন সংখ্যা ১৫ (p(7)=15), কিন্তু কোডটি ১৪ রিটার্ন করছে কারণ এটি সম্ভবত খালি পার্টিশন বা নিজে নিজের পার্টিশন বাদ দিচ্ছে। সঠিক পার্টিশন কাউন্টের জন্য ডাইনামিক প্রোগ্রামিং বা অয়লারের পেন্টাগোনাল নম্বর থিওরেম ব্যবহার করা ভালো।

  1. বাইনারি ট্রির গভীরতম নোডগুলোর যোগফল বের করা C++-এ

  2. C++-এ একটি সংখ্যার জোড় ফ্যাক্টরগুলোর যোগফল (Sum of Even Factors)

  3. C++-এ একটি সংখ্যার জোড় ফ্যাক্টরগুলোর যোগফল বের করা (Sum of Even Factors)

  4. C++-এ দেওয়া সংখ্যার ডিজিটগুলোর যোগফল বের করা