इस समस्या में, हमें दो संख्याएं a और b और एक पूर्णांक बाउंड दिया गया है और हमें बाउंड से कम उन सभी मानों को प्रिंट करना है जो a और b की घातों के योग हैं।
Bound >= a^i + b^j
उदाहरण
Input: a=2, b=3, bound=8 Output: 2 3 4 5 7
इस समस्या को हल करने के लिए, हम दो वेरिएबल i और j का उपयोग करके नेस्टेड लूप का उपयोग करेंगे जो 0 से शुरू होते हैं। बाहरी लूप की समाप्ति शर्त x^i = bound होगी और आंतरिक लूप की समाप्ति शर्त x^i + y^j > bound होगी। आंतरिक लूप के प्रत्येक इटरेशन के लिए, हम x^i + y^j के मान को एक सॉर्टेड लिस्ट में संग्रहीत करेंगे जिसमें ऐसे सभी मान हों। और अंत में लिस्ट के सभी मान प्रिंट करें।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने वाला प्रोग्राम:
#include <bits/stdc++.h>
using namespace std;
void powerSum(int x, int y, int bound) {
set<int> sumOfPowers;
vector<int> powY;
int i;
powY.push_back(1);
for (i = y; i < bound; i = i * y)
powY.push_back(i);
i = 0;
while (true) {
int powX = pow(x, i);
if (powX >= bound)
break;
for (auto j = powY.begin(); j != powY.end(); ++j) {
int num = powX + *j;
if (num <= bound)
sumOfPowers.insert(num);
else
break;
}
i++;
}
set<int>::iterator itr;
for (itr = sumOfPowers.begin(); itr != sumOfPowers.end(); itr++) {
cout << *itr << " ";
}
}
int main() {
int x = 2, y = 3, bound = 25;
cout << "Sum of powers of " << x << " and " << y << " less than " << bound << " are :\n";
powerSum(x, y, bound);
return 0;
}
आउटपुट
Sum of powers of 2 and 3 less than 25 are - 2 3 4 5 7 9 10 11 13 17 19 25