মান লেই দুটি পজিটিভ ইন্টিজার x এবং y আছে, আমরা বলতে পারি একটি ইন্টিজার পাওয়ারফুল যদি এটি x^i + y^j সমান হয় কিছু i >= 0 এবং j >= 0 এর জন্য। আমাদের bound-র চেয়ে কম বা সমান সকল পাওয়ারফুল ইন্টিজার বের করতে হবে।
সেজন্য, যদি ইনপুট হয় x = 2, y = 3, bound = 10, তবে আউটপুট হবে [2,3,4,5,7,9,10], কারণ 2 = 2^0 + 3^0, 3 = 2^1 + 3^0, 4 = 2^0 + 3^1, 5 = 2^1 + 3^1, 7 = 2^2 + 3^1, 9 = 2^3 + 3^0, 10 = 2^0 + 3^2।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −
- a, b ০ দিয়ে ইনিশিয়ালাইজ
- res := একটি নতুন লিস্ট
- যদি x == 1 এবং y == 1 হয়, তবে
- যদি bound >= 2 হয়, তবে
- res-এ ২ যোগ করুন
- যদি bound >= 2 হয়, তবে
- অন্যথায় যদি x == 1 হয়, তবে
- যখন y^b + 1 <= bound, লুপ
- y^b + 1 res-এ যোগ
- b := b + 1
- যখন y^b + 1 <= bound, লুপ
- অন্যথায় যদি y == 1 হয়, তবে
- যখন x^a + 1 <= bound, লুপ
- x^a + 1 res-এ যোগ
- a := a + 1
- যখন x^a + 1 <= bound, লুপ
- অন্যথায়,
- যখন x^a + 1 <= bound, লুপ
- যদি x^a + y^b <= bound, তবে
- res-এ x^a + y^b যোগ
- b := b + 1
- অন্যথায়,
- a := a + 1
- b := 0
- যদি x^a + y^b <= bound, তবে
- যখন x^a + 1 <= bound, লুপ
বেস্টার বোঝার জন্য নিচের ইম্প্লিমেন্টেশন দেখুন −
উদাহরণ
class Solution:
def powerfulIntegers(self, x, y, bound):
a, b = 0, 0
res = []
if x == 1 and y == 1:
if bound >= 2:
res.append(2)
elif x == 1:
while y**b + 1 <= bound:
res.append(y**b + 1)
b += 1
elif y == 1:
while x**a + 1 <= bound:
res.append(x**a + 1)
a += 1
else:
while x**a + 1 <= bound:
if x**a + y**b <= bound:
res.append(x**a + y**b)
b += 1
else:
a += 1
b = 0
return list(set(res))
ob = Solution()
print(ob.powerfulIntegers(2, 3, 10))
ইনপুট
2,3,10
আউটপুট
[2, 3, 4, 5, 7, 9, 10]