मान लीजिए कि हमारे पास एक पूर्णांक 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