अवधारणा
एक दिए गए पूर्णांक N के संबंध में, हमारा कार्य N के सभी गुणनखंड निर्धारित करना है और N के चार गुणनखंडों का गुणनफल प्रिंट करना है ताकि −
<उल क्लास="सूची"><ली>चार गुणनखंडों का योग N के बराबर हो।ली><ली>चार गुणनखंडों का गुणनफल सबसे बड़ा हो।ली>उल>यह देखा गया है कि यदि ऐसे 4 गुणनखंड ढूंढना असंभव है तो "Not possible" प्रिंट करें।
यह ध्यान दिया जाना चाहिए कि उत्पाद को अधिकतम करने के लिए सभी चार गुणनखंड एक-दूसरे के बराबर हो सकते हैं।
इनपुट
24
आउटपुट
All the factors are -> 1 2 4 5 8 10 16 20 40 80 Product is -> 160000
गुणनखंड 20 को चार बार चुनें,
इसलिए, 20+20+20+20 = 24 और गुणनफल अधिकतम है।
विधि
इस समस्या को हल करने के लिए चरण दर चरण एल्गोरिदम निम्नलिखित है −
<उल क्लास="सूची"><ली>सबसे पहले 1 से 'N' के वर्गमूल तक जाकर संख्या 'N' के गुणनखंड निर्धारित करें और सत्यापित करें कि 'i' और 'n/i' N को विभाजित करते हैं और उन्हें एक वेक्टर में संग्रहीत करें।ली><ली>अब हम वेक्टर को सॉर्ट करते हैं और हर तत्व प्रिंट करते हैं।ली><ली>तीन लूप्स लागू करके चौथी संख्या के साथ उत्पाद को अधिकतम करने के लिए तीन संख्याएं निर्धारित करें।ली><ली>अंत में हम पिछले उत्पाद के साथ अगले अधिकतम उत्पाद को प्रतिस्थापित करते हैं।ली><ली>जब आपको चार गुणनखंड मिल जाएं तो उत्पाद प्रिंट करें।ली>उल>उदाहरण
<प्रि क्लास="प्रिटीप्रिंट नोट्रांसलेट">// C++ program to find four factors of N // with maximum product and sum equal to N #include <bits/stdc++.h> using namespace std; // गुणनखंड खोजने और उन चार गुणनखंडों को प्रिंट करने वाला फ़ंक्शन void findfactors2(int n1){ vector<int> vec2; // अब एक वेक्टर में सभी गुणनखंड डालें for (int i = 1; i * i <= n1; i++) { if (n1 % i == 0) { vec2.push_back(i); vec2.push_back(n1 / i); } } // वेक्टर को सॉर्ट करने के लिए उपयोग किया जाता है sort(vec2.begin(), vec2.end()); // सभी गुणनखंड प्रिंट करने के लिए उपयोग किया जाता है cout << "All the factors are -> "; for (int i = 0; i < vec2.size(); i++) cout << vec2[i] << " "; cout << endl; // कोई भी तत्व 1 से विभाज्य होता है int maxProduct2 = 1; bool flag2 = 1; // तीन लूप लागू करके हम // तीन अधिकतम गुणनखंड खोजेंगे for (int i = 0; i < vec2.size(); i++) { for (int j = i; j < vec2.size(); j++) { for (int k = j; k < vec2.size(); k++) { // अब चौथे गुणनखंड को y में संग्रहीत करें int y = n1 - vec2[i] - vec2[j] - vec2[k]; // यह देखा गया है कि यदि चौथा गुणनखंड ऋणात्मक हो जाता है // तो ब्रेक करें if (y <= 0) break; // अब हम पिछले की तुलना में अधिक इष्टतम संख्या // प्रतिस्थापित करेंगे if (n1 % y == 0) { flag2 = 0; maxProduct2 = max(vec2[i] * vec2[j] * vec2[k] *y,maxProduct2); } } } } // यदि संख्याएं मौजूद हैं तो उत्पाद प्रिंट करने के लिए उपयोग किया जाता है if (flag2 == 0) cout << "Product is -> " << maxProduct2 << endl; else cout << "Not possible" << endl; } // ड्राइवर कोड int main(){ int n1; n1 = 80; findfactors2(n1); return 0; }आउटपुट
All the factors are -> 1 2 4 5 8 10 16 20 40 80 Product is -> 160000