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

C++-এ N-এর চারটি ফ্যাক্টর যাদের যোগফল N এবং গুণফল সর্বোচ্চ

একটি পূর্ণসংখ্যা N দেওয়া আছে। N-এর সব ফ্যাক্টর বের করে চারটি ফ্যাক্টর নির্বাচন করতে হবে যেন:

  • চারটি ফ্যাক্টরের যোগফল N-এর সমান।
  • চারটি ফ্যাক্টরের গুণফল সর্বোচ্চ।

উদাহরণ: N = 24 হলে ফ্যাক্টরগুলো: 1, 2, 3, 4, 6, 8, 12, 24। ৬ কে চারবার ব্যবহার করলে 6+6+6+6=24 এবং গুণফল 1296 (সর্বোচ্চ)।

সমাধানের ধাপ
  • N প্রাইম হলে সমাধান নেই।
  • N যদি ৪ দিয়ে বিভাজ্য হয়, তবে উত্তর (N/4)^4।
  • অন্যথায়, তৃতীয় শেষ ফ্যাক্টর দুবার নিয়ে বাকি দুটি ফ্যাক্টর নেস্টেড লুপ দিয়ে খুঁজে বের করা হয়।
উদাহরণ কোড
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool isPrime(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    return true;
}

void get_factors(int N, vector<int> fact_vectors[]) {
    for (int i = 2; i < N; i++) {
        for (int j = 1; j * j <= i; j++) {
            if (i % j == 0) {
                if (i / j == j)
                    fact_vectors[i].push_back(j);
                else {
                    fact_vectors[i].push_back(j);
                    fact_vectors[i].push_back(i / j);
                }
            }
        }
        sort(fact_vectors[i].begin(), fact_vectors[i].end());
    }
}

int getProduct(int n) {
    vector<int> v[n + 100];
    get_factors(n + 100, v);
    if (n % 4 == 0) {
        int x = n / 4;
        x *= x;
        return x * x;
    } else {
        if (isPrime(n))
            return -1;
        else {
            int ans = -1;
            if (v[n].size() > 2) {
                int fac = v[n][v[n].size() - 3];
                for (int i = v[n].size() - 1; i >= 0; i--) {
                    for (int j = v[n].size() - 1; j >= 0; j--) {
                        if ((fac * 2) + (v[n][j] + v[n][i]) == n)
                            ans = max(ans, fac * fac * v[n][j] * v[n][i]);
                    }
                }
            }
            return ans;
        }
    }
}

int main() {
    int n = 24;
    cout << "The product is: " << getProduct(n);
}
আউটপুট
The product is: 1296
  1. C++-এ LCM যা গুণফলের সমান হয় এমন সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে

  2. C++ প্রোগ্রাম: দুটি সংখ্যা বের করা যাদের যোগফল ও গুণফল N-র সমান

  3. পাইথনে N-এর চারটি ফ্যাক্টর বের করা যাতে যোগফল N এবং গুণফল সর্বাধিক

  4. পাইথনে N-এর চারটি ফ্যাক্টর বের করা যাতে যোগফল N এবং গুণফল সর্বাধিক (সেট-২)