এই সমস্যায় দুটি সংখ্যা a এবং b এবং একটি পূর্ণসংখ্যা বাউন্ড দেওয়া আছে। আমাদের বাউন্ডের চেয়ে ছোট সব মান প্রিন্ট করতে হবে যা a এবং b-এর ক্ষমতার যোগফল হিসেবে প্রকাশ করা যায়।
Bound >= a^i + b^j
উদাহরণ
ইনপুট: a=2, b=3, bound=8 আউটপুট: 2 3 4 5 7
এই সমস্যাটি সমাধানের জন্য দুটি ভেরিয়েবল i এবং j দিয়ে নেস্টেড লুপ ব্যবহার করা হবে ০ থেকে শুরু করে। বাহ্যিক লুপের শর্ত 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