मान लीजिए हमारे पास दो धनात्मक पूर्णांक x और y हैं, हम कह सकते हैं कि एक पूर्णांक शक्तिशाली है यदि यह कुछ पूर्णांक i >= 0 और j >= 0 के लिए x^i + y^j के बराबर है। हमें उन सभी शक्तिशाली पूर्णांकों की सूची ढूंढनी है जिनका मान बाउंड से कम या बराबर है।
तो, यदि इनपुट x = 2 और y = 3 और बाउंड 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 को 0 से आरंभ करें
- res:= एक नई सूची
- यदि x, 1 के समान है और y, 1 के समान है, तो
- यदि bound >= 2, तो
- res के अंत में 2 डालें
- यदि 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]