একটি পূর্ণসংখ্যা 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