एक ऐसा प्रोग्राम लिखें जो एक पूर्णांक लेता है और मूल संख्या के बराबर छोटे पूर्णांक को गुणा करने के सभी तरीकों को मुद्रित करता है, बिना कारकों के सेट दोहराए। दूसरे शब्दों में, यदि आपके आउटपुट में 4 * 3 है, तो आपको फिर से 3 * 4 प्रिंट नहीं करना चाहिए क्योंकि यह एक दोहराना सेट होगा। ध्यान दें कि यह केवल प्रमुख कारक के लिए नहीं पूछ रहा है। साथ ही, आप मान सकते हैं कि इनपुट पूर्णांक आकार में उचित हैं; दक्षता की तुलना में शुद्धता अधिक महत्वपूर्ण है। PrintFactors (12) 12 * 1 6 * 2 4 * 3 3 * 2 * 2इस एल्गोरिदम की समय जटिलता
public void printFactors(int number) {
printFactors("", number, number);
}
public void printFactors(String expression, int dividend, int previous) {
if(expression == "")
System.out.println(previous + " * 1");
for (int factor = dividend - 1; factor >= 2; --factor) {
if (dividend % factor == 0 && factor <= previous) {
int next = dividend/factor;
if (next <= factor)
if (next <= previous)
System.out.println(expression + factor + " * " + next);
printFactors(expression + factor + " * ", next, factor);
}
}
}
मुझे लगता है, यह
दी गई संख्या एन और के एन = घ प्रधानमंत्री कारकों की संख्या है, तो है तो समय जटिलता ओ (एन^डी) है। ऐसा इसलिए है क्योंकि रिकर्सन गहराई प्रमुख कारकों की संख्या तक बढ़ जाएगी। लेकिन यह तंग बंधन नहीं है। कोई सुझाव?
मुझे नहीं लगता कि कोड काम करता है। उदाहरण के लिए: 'nextnext' परिभाषित नहीं किया गया है। –
@ पॉलहैंकिन। क्षमा करें कि एक टाइपो था। इसे – user12331
http://stackoverflow.com/questions/38949619/confusion-related-to-the-time-complexity-for-this-algorithm –