Python求一組數字的最大公約數和最小公倍數

一、先來看求最大公約數

1)、利用gcd函數

math庫裏面有個gcd函數能直接求出兩個數字的最大公約數,遇到求一組數字的最大公約數的時候,加一個循環就好,如下:

import math
def gcd_many(s):
    g = 0
    for i in range(len(s)):
        if i == 0:
            g = s[i]
        else:
            g=math.gcd(g,s[i])

    return g

s = list(map(int,input().split()))
print(gcd_many(s))

看輸入輸出:

輸入:4 8 12 24 48
輸出:4

2)、不使用庫函數裏面的gcd函數

不用gcd函數的話,我們就自己寫一個求兩個數最大公約數的函數,如下:

def gcd_2(a,b):		#求兩個數的最大公約數
    a,b = max(a,b),min(a,b)
    if a%b == 0:
        return b
    else:
        return gcd_2(b,a%b)

def gcd_many(s):		#求全部的
    g = 0
    for i in range(len(s)):
        if i == 0:
            g = s[i]
        else:
            g=gcd_2(g,s[i])

    return g

s = list(map(int,input().split()))
print(gcd_many(s))

二、求一組數的最小公倍數

求最小公倍數沒有捷徑可走,我們知道小時候學的“短除法”求最小公倍數,就是將兩個數所有的約數,乘到一起再乘以下面的兩個數字,如圖:
在這裏插入圖片描述
最小公倍數就是22342*2*3*4,所以只要求出最大公約數,在乘上每個數除以最大公約數的值即可。

不廢話了,上代碼:

import math
s = list(map(int,input().split()))
def gbs(s):
    a,b = s[0],s[1]
    a = a // math.gcd(a, b) * b // math.gcd(a, b) * math.gcd(a, b)
    if len(s)>2:
        for i in range(2,len(s)):
            b = s[i]
            a = a//math.gcd(a,b) * b//math.gcd(a,b) * math.gcd(a, b)
    return a

print(gbs(s))

看輸入輸出:

輸入:10 16 4
輸出:80

小白歡迎指點~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章