ধরুন আমাদের একটি পূর্ণসংখ্যা N আছে। কাজ হল N-এর সমস্ত গুণনীয়ক খুঁজে বের করা এবং N-এর চারটি গুণনীয়কের গুণফল প্রদর্শন করা, যেমন −
-
তাদের চারটি গুণনীয়কের যোগফল N
এর সমান -
চারটি কারণের গুণফল সর্বাধিক
ধরুন সংখ্যাটি 24, তাহলে গুণফল হল 1296। আমরা জানি সবগুলো গুণনীয়ক হল 1, 2, 3, 4, 6, 8, 12, 24। আমাদেরকে 6 গুণনীয়ক চারবার বেছে নিতে হবে। সুতরাং 6 + 6 + 6 + 6 =24। এখানে পণ্যটি সর্বাধিক।
এটি সমাধান করার জন্য, আমাদের 1 থেকে N পর্যন্ত সমস্ত ফ্যাক্টর খুঁজে বের করতে হবে, তারপর আমাদের এই শর্তগুলি পরীক্ষা করতে হবে
-
যদি N মৌলিক হয়, তাহলে উত্তরটি মিথ্যা হবে
-
প্রদত্ত n 4 দ্বারা বিভাজ্য হলে উত্তর হবে x^4। যেখানে x একটি ভাগফল যখন n 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