ধরা যাক আমাদের তিনটি পূর্ণসংখ্যা 'a' এবং 'b' এবং 'সীমা' আছে। কাজ হল পরিসরে সংখ্যাগুলি প্রিন্ট করা [a, limit]। এই সংখ্যাগুলির তালিকাকে শক্তিশালী পূর্ণসংখ্যা বলা হয় এবং
হিসাবে উপস্থাপন করা হয়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', 'b' এবং 'limit' নিন।
- একটি ফাংশন শক্তিশালী সংখ্যা (int a, int b, int limit) ইনপুট হিসাবে 'a', 'b' এবং 'সীমা' সংখ্যাগুলি নেয়। ফাংশনটি সমস্ত শক্তিশালী সংখ্যার তালিকা প্রদান করে যেমন a^i + b^j যেখানে i>=0 এবং j>=0।
- সীমা পর্যন্ত দুটি নেস্টেড লুপ নিন এবং প্রতিবার, এর সূচকগুলির সাথে গুণ করে শক্তিশালী সংখ্যাগুলি খুঁজুন।
- যদি সংখ্যাটি পরিসর [a, limit] এর মধ্যে থাকে, তাহলে সংখ্যাটিকে একটি সেটে সংরক্ষণ করুন (সংখ্যার নকল এড়াতে)।
- সেটের উপর পুনরাবৃত্তি করুন এবং আউটপুট প্রিন্ট করুন।
উদাহরণ
#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]৷