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