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

โปรแกรมค้นหาจำนวน GCD ย่อยที่แตกต่างกันใน Python


สมมติว่าเรามีจำนวนอาร์เรย์ที่มีค่าบวก เราต้องหาจำนวนของ GCD ที่แตกต่างกันในลำดับย่อยที่ไม่ว่างเปล่าของ nums ดังที่เราทราบ GCD ของลำดับตัวเลขเป็นค่าที่ยิ่งใหญ่ที่สุดที่หารตัวเลขทั้งหมดในลำดับอย่างเท่าเทียมกัน

ดังนั้น หากอินพุตเท่ากับ nums =[4,6,18] ผลลัพธ์จะเป็น 4 เพราะ gcd([4]) =4, gcd([6]) =6, gcd([18]) =18 gcd([4,6]) =2, gcd([4,18]) =2, gcd([6,18]) =6, gcd([4,6,18]) =2 ดังนั้นตัวเลขทั้งหมดจึงเป็น [ 4,6,18,2] มี 4 ตัว

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • T :=สูงสุด nums + 1

  • nums :=ชุดใหม่ที่มีจำนวน nums ที่แตกต่างกันทั้งหมด

  • ตอบ :=0

  • สำหรับ x ในช่วง 1 ถึง T - 1 ทำ

    • ก. :=0

    • สำหรับ y ในช่วง x ถึง T - 1 ให้อัปเดตในแต่ละขั้นตอนทีละ x ทำ

      • ถ้า y เป็นตัวเลข ดังนั้น

        • g :=gcd(g, y)

      • ถ้า g เท่ากับ x แล้ว

        • ออกมาจากลูป

    • ถ้า g เท่ากับ x แล้ว

      • ans :=ans + 1

  • กลับมาอีกครั้ง

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

from math import gcd
def solve(nums):
   T = max(nums) + 1
   nums = set(nums)
   ans = 0

   for x in range(1, T):
      g = 0
      for y in range(x, T, x):
         if y in nums:
            g = gcd(g, y)
         if g == x:
            break

      if g == x:
         ans += 1

   return ans

nums = [4,6,18]
print(solve(nums))

อินพุต

[4,6,18]

ผลลัพธ์

4