मान लीजिए कि हमारे पास तीन पूर्णांक 'ए' और 'बी' और 'सीमा' हैं। कार्य [ए, सीमा] श्रेणी में संख्याओं को मुद्रित करना है। इन संख्याओं की सूची को शक्तिशाली पूर्णांक कहा जाता है और इसे इस रूप में दर्शाया जाता है,
a^i + b^j जैसे कि i>=0 और j>=0
उदाहरण के लिए
इनपुट-1:
a = 2
b = 5
limit = 10
आउटपुट:
[2, 3, 4, 5, 6, 7, 9]
स्पष्टीकरण: प्रत्येक i और j के लिए,
2^0 + 5^0 =2 , 2^0 + 5^1=6
2^1 + 5^0 =3 , 2^1 + 5^1=7
2^2 + 5^0 =5 , 2^3 + 5^0=9
इस समस्या को हल करने का तरीका
इस विशेष समस्या को हल करने के लिए पाशविक बल दृष्टिकोण यह है कि हम दो नेस्टेड लूप लेंगे और सीमा तक पुनरावृति करेंगे। फिर हम ऊपरी सीमा में प्रत्येक घातांक के लिए दो संख्याओं का योग पाएंगे और परिणामी संख्या को सूची में सम्मिलित करेंगे।
- तीन नंबर 'ए', 'बी' और 'लिमिट' लें।
- एक फंक्शन पावरफुलनंबर्स (इंट ए, इंट बी, इंट लिमिट) इनपुट के रूप में 'ए', 'बी' और 'लिमिट' नंबर लेता है। फ़ंक्शन सभी शक्तिशाली संख्याओं की सूची देता है जैसे कि a^i + b^j जहां i>=0 और j>=0.
- सीमा तक दो नेस्टेड लूप लें और हर बार, इसकी अनुक्रमणिका से गुणा करके शक्तिशाली संख्याएं पाएं।
- यदि संख्या [ए, सीमा] की सीमा के बीच है, तो संख्या को एक सेट में रखें (संख्याओं के डुप्लिकेट से बचने के लिए)।
- सेट पर पुनरावृति करें और आउटपुट प्रिंट करें।
उदाहरण
#include <bits/stdc++.h> using namespace std; void powerfulNum(int a, int b, int limit) { set < int > s; for (int i = 1; i < limit; i *= a) { for (int j = 1; j < limit; j *= b) { if (i + j <= limit) { s.insert(i + j); } else break; if (b == 1) break; } if (a == 1) break; } for (auto it: s) { cout << it << " "; } } int main() { int a = 2; int b = 5; int limit = 10; powerfulNum(a, b, limit); return 0; }
उपरोक्त कोड को चलाने से आउटपुट इस प्रकार उत्पन्न होगा,
आउटपुट
2 3 5 6 7 9
यहाँ, 2 से 10 तक की सभी शक्तिशाली संख्याएँ [2, 3, 4, 6, 7, 9] हैं।