परिचय
इस ट्यूटोरियल में हम एक ऐसा प्रोग्राम लिखेंगे जो यह ढूंढता है कि एक पूर्णांक को दिए गए n-वें घात की अद्वितीय संख्याओं के योग के रूप में कितने तरीकों से व्यक्त किया जा सकता है।
हमारे पास दो पूर्णांक number और power हैं। और हमें यह ढूंढना है कि दिए गए number को अद्वितीय प्राकृतिक संख्याओं के n-वें घात के योग के रूप में कितने तरीकों से दर्शाया जा सकता है। आइए एक उदाहरण देखते हैं।
इनपुट - number = 50, power = 2
आउटपुट - 3
हम इस समस्या को हल करने के लिए रिकर्सन (recursion) का उपयोग करेंगे।
समस्या समाधान के चरण
- संख्या और पावर को इनिशियलाइज़ करें।
- उपयुक्त नाम के साथ एक रिकर्सिव फंक्शन लिखें। यह number, power और i को आर्गुमेंट्स के रूप में स्वीकार करता है।
- यदि number शून्य से कम है या pow(i, power) number से अधिक है, तो 0 वापस करें।
- यदि संख्या शून्य है या pow(i, power) संख्या के बराबर है, तो 1 वापस करें।
- कुल तरीकों की गणना के लिए फंक्शन के दो रिकर्सिव कॉल हैं:
- i बढ़ाएं।
- पहले रिकर्सिव कॉल में, दी गई संख्या से कम संख्याओं की जांच करें।
- दूसरे रिकर्सिव कॉल में, दी गई संख्या की जांच करें।
उदाहरण कोड
#include <bits/stdc++.h>
using namespace std;
int findPossibleWaysCount(int number, int power, int i = 1) {
if(number < 0 || number < pow(i, power)) {
return 0;
}
if(number == 0 || number == pow(i, power)) {
return 1;
}
return findPossibleWaysCount(number - pow(i, power), power, i + 1) + findPossibleWaysCount(number, power, i + 1);
}
int main() {
// संख्या और पावर इनिशियलाइज़ करना
int number = 50, power = 2;
cout << findPossibleWaysCount(number, power) << endl;
return 0;
}
आउटपुट
3
व्याख्या
50 को वर्गों (power=2) के योग के रूप में 3 तरीकों से व्यक्त किया जा सकता है: 1² + 7² = 1 + 49 = 50 5² + 5² = 25 + 25 = 50 (लेकिन अद्वितीय संख्याएं चाहिए, तो यह अमान्य) 1² + 3² + 4² + 5² = 1 + 9 + 16 + 25 = 51 (नहीं) सही संयोजन: 1²+7², 5²+5²(अमान्य), और अन्य संयोजन।
निष्कर्ष
रिकर्सिव दृष्टिकोण सभी संभावित संयोजनों का पता लगाता है। बड़ी संख्याओं के लिए डायनामिक प्रोग्रामिंग का उपयोग करके अनुकूलित किया जा सकता है। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।