Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จำนวนเต็มทรงพลังใน Python


สมมติว่าเรามีจำนวนเต็มบวกสองจำนวน 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 เท่ากับ 1 แล้ว
      • ในขณะที่ x^a + 1 <=ผูกไว้ ทำ
        • แทรก x^a + 1 ลงใน res
        • a :=a + 1
    • มิฉะนั้น
      • ในขณะที่ x^a + 1<=ถูกผูกไว้ ทำ
        • ถ้า 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]