Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 강력한 정수

<시간/>

두 개의 양의 정수 x와 y가 있다고 가정하고 일부 정수 i>=0 및 j>=0에 대해 x^i + y^j와 같으면 정수가 강력하다고 말할 수 있습니다. 모든 목록을 찾아야 합니다. - bound보다 작거나 같은 값을 갖는 강력한 정수.

따라서 입력이 x =2 및 y =3이고 경계가 10이면 출력은 2 =2^0 + 3^과 같이 [2,3,4,5,7,9,10]이 됩니다. 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이면
      • res 끝에 2 삽입
    • 그렇지 않고 x가 1과 같을 때
      • y^b + 1 <=bound, do
        • y^b + 1을 res에 삽입
        • b :=b + 1
    • 그렇지 않고 y가 1과 같을 때
      • x^a + 1 <=바인딩되는 동안 do
        • x^a + 1을 res에 삽입
        • a :=a + 1
    • 그렇지 않으면
      • x^a + 1<=bound, do
        • x^a+y^b <=바인딩된 경우
          • b :=b + 1
        • 그렇지 않으면
          • a :=a + 1
          • b:=0

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

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]