สมมติว่าเรามีจำนวนเต็มบวกสองจำนวน x และ y เราสามารถพูดได้ว่าจำนวนเต็มนั้นมีพลังถ้ามันเท่ากับ x^i + y^j สำหรับจำนวนเต็มบางตัว i>=0 และ j>=0 เราต้องหารายชื่อทั้งหมด -จำนวนเต็มทรงพลังที่มีค่าน้อยกว่าหรือเท่ากับขอบเขต
ดังนั้น หากอินพุตเท่ากับ 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 แล้ว
- ถ้าถูกผูกไว้>=2 แล้ว
- แทรก 2 ที่ส่วนท้ายของ res
- มิฉะนั้นเมื่อ x เท่ากับ 1 แล้ว
- ในขณะที่ y^b + 1 <=ถูกผูกไว้ ทำ
- แทรก y^b + 1 ลงใน res
- b :=b + 1
- ในขณะที่ y^b + 1 <=ถูกผูกไว้ ทำ
- มิฉะนั้นเมื่อ y เท่ากับ 1 แล้ว
- ในขณะที่ x^a + 1 <=ผูกไว้ ทำ
- แทรก x^a + 1 ลงใน res
- a :=a + 1
- ในขณะที่ x^a + 1 <=ผูกไว้ ทำ
- มิฉะนั้น
- ในขณะที่ x^a + 1<=ถูกผูกไว้ ทำ
- ถ้า x^a+y^b <=ผูก แล้ว
- b :=b + 1
- มิฉะนั้น
- a :=a + 1
- b:=0
- ถ้า x^a+y^b <=ผูก แล้ว
- ในขณะที่ x^a + 1<=ถูกผูกไว้ ทำ
- ถ้าถูกผูกไว้>=2 แล้ว
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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]