Giả sử chúng ta có hai số nguyên dương x và y, chúng ta có thể nói một số nguyên là mạnh nếu nó bằng x ^ i + y ^ j với một số số nguyên i> =0 và j> =0. Chúng ta phải tìm một danh sách tất cả -số nguyên mạnh mẽ có giá trị nhỏ hơn hoặc bằng bị ràng buộc.
Vì vậy, nếu đầu vào là x =2 và y =3 và giới hạn là 10, thì đầu ra sẽ là [2,3,4,5,7,9,10], như 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
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- khởi tạo a, b dưới dạng 0
- res:=một danh sách mới
- nếu x giống 1 và y giống 1 thì
- nếu ràng buộc> =2, thì
- chèn 2 vào cuối res
- ngược lại khi x giống 1 thì
- trong khi y ^ b + 1 <=ràng buộc, thực hiện
- chèn y ^ b + 1 vào res
- b:=b + 1
- trong khi y ^ b + 1 <=ràng buộc, thực hiện
- ngược lại khi y giống 1 thì
- while x ^ a + 1 <=bind, do
- chèn x ^ a + 1 vào res
- a:=a + 1
- while x ^ a + 1 <=bind, do
- nếu không,
- while x ^ a + 1 <=bind, do
- nếu x ^ a + y ^ b <=ràng buộc, thì
- b:=b + 1
- nếu không,
- a:=a + 1
- b:=0
- nếu x ^ a + y ^ b <=ràng buộc, thì
- while x ^ a + 1 <=bind, do
- nếu ràng buộc> =2, thì
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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))
Đầu vào
2,3,10
Đầu ra
[2, 3, 4, 5, 7, 9, 10]