小學的時候咱們就學過如何求兩個數的最小公倍數了,如求8,12的最小公倍數,用質數反覆除的方法, python
2| 8 24 app
2| 4 12 spa
2| 2 6 code
1 3 rem
最後的結果就是2*2*2*3=24,可是如何求3個或3個數以上的最小公倍數呢?其實原理和求兩個數的最小公倍數是同樣的,下面是用Python實現的求多個數的最小公倍數的程序段,附上了比較詳細的註釋代碼,求各位的指教: get
import math """ 得到多個數的最小公倍數 isPrime(n) getMutiPrime(n) getLeastCommonMutible(numList) """ def isPrime(n): """ 判斷一個數是不是質數 """ if n==2: return True if n==1 or n%2==0: return False p = int(math.sqrt(n))+1 i = 3 while i<p: if n%i==0: return False i+=2 return True def getMutiPrime(n): """get muti num of n n=num1*num2...*numx for num1...numx are all prime numbers 將數n進行質因數分解 prime factorization """ if n==2: resultlist = [2] else: list1 = [i for i in range(2,int(math.sqrt(n))+1) if isPrime(i)] #print(list1) resultlist=[] tmp = n while not isPrime(tmp) and tmp!=1: for i in list1: if tmp%i==0: resultlist.append(i) tmp=tmp//i #print(tmp) #print(resultlist) if tmp!=1: resultlist.append(tmp) return resultlist def isMutillistFill(mutilLsit): """ 判斷一個二維列表中的每個列表是否都爲空 mutilLsit=[[],[],[]] 返回False mutilLsit=[[1],[],[]] 返回True """ for row in mutilLsit: if len(row)>0: return True return False def getLeastCommonMutible(numList): """ numList 待求數的列表, 返回它們的最小公倍數的質因數列表 """ primelists=[] set1=set({}) mutilResult = [] for i in numList: primelists.append(getMutiPrime(i)) set1.update(set(i1 for i1 in getMutiPrime(i))) #print(primelists) flag = True flag1 = False while flag: for i in set1: for row in primelists: if i in row: row.remove(i) flag1 = True if flag1: mutilResult.append(i) flag1 = False flag = isMutillistFill(primelists) #print(mutilResult) return mutilResult def getMutil(numList): result = 1 for i in numList: result*=i return result if __name__=='__main__': print(getMutil(getLeastCommonMutible([8,12,20])))#獲取8,12,20的最小公倍數 print(getMutil(getLeastCommonMutible([i for i in range(2,21)])))#獲取1到20的全部數的最小公倍數