程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python中求任意數量參數的最大公約數最小公倍數素數

編輯:Python

思路

判斷參數是否合法:

  1. 至少需要兩個參數(判斷長度是否大於2)
  2. 只接受正整數(遍歷所有參數》判斷類型是否為整型 是否小於等於零)
  3. 不符合:返回提示信息 <字符串>
  4. 符合:返回False
# 參數輸入判斷是否合法
def _notStd(num, length=2, positive=True):
if len(num) < length:
return "至少需要兩個參數"
for x in num:
if type(x) != int:
return "只支持整數"
if positive and x <= 0:
return "只支持正整數"
else:
return False

最大公約數:

  1. 最小的參數是否可直接成為結果(從小到大排序 結果設為最小值)
  2. 遍歷每個參數並判斷結果是否能整除
    1. 判斷參數模結果不為零時 將模數賦值給結果,進行迭代
  3. 結果可以整除所有參數(如果取模都為零,則運行else返回結果)
# 最大公約數
def gcd(*num, result=0):
# 判斷數值是否合法
judge = _notStd(num)
if judge:
return judge
if result == 0: # 首次調用
num = sorted(list(num)) # 從小到大排序
result = num[0] # 默認結果為最小值
for i in num:
if i % result != 0: # i模結果不為零
result = i % result # 結果設為這兩個值的模
return gcd(*num, result=result) # 遞歸
else:
return result # 返回最小值

最小公倍數: 

  1. 最大的參數是否可直接成為結果(從小到大排序 結果設為最大值)
  2. 遍歷每個參數並判斷結果是否能整除
    1. 判斷參數模結果不為零時 算出此結果與此參數的最小公倍數(將結果與此參數的最小公倍數的積賦值給結果),進行迭代
  3. 結果可以整除所有參數(如果取模都為零,則運行else返回結果)
# 最小公倍數
def lcm(*num, result=0):
# 判斷數值是否合法
judge = _notStd(num)
if judge:
return judge
if result == 0: # 首次調用
num = sorted(list(num)) # 從小到大排序
result = num[-1] # 默認結果為最大值
for i in num:
if result % i != 0: # 最大值模i不為零
result = i * result // gcd(i, result) # 最大值設為這兩個數的最大公倍數
lcm(*num, result=result) # 遞歸
else:
return result # 返回最大值

是否為素數: 

  1. 定義內置函數 是否為素數
    1. 從2遍歷到參數-1
    2. 不能整除返回False
    3. 都能整除 運行else 返回True
  2. 長度為1時:通過下標將包含信息的字符串輸出(False下標為0,True下標為1)
  3. 長度不為1時:遍歷運行每個
# 對素數進行歸納
def isSu(*num):
# 判斷數值是否合法
judge=_notStd(num, length=1)
if judge:
return judge
# 判斷是否是素數
def su(x):
for i in range(2, x):
if x % i == 0: return False
else:
return True
# 一個參數時直接輸出判斷結果
if len(num) == 1:
return ["合數", "素數"][su(num[0])] # False=0 True=1
# 多個參數對參數進行歸納
else:
result = {"素數": [], "合數": []}
for x in num:
if su(x):
result["素數"].append(x)
else:
result["合數"].append(x)
return result

源碼

# 參數輸入判斷是否合法
def _notStd(num, length=2, positive=True):
if len(num) < length:
return "至少需要兩個參數"
for x in num:
if type(x) != int:
return "只支持整數"
if positive and x <= 0:
return "只支持正整數"
else:
return False
# 最大公約數
def gcd(*num, result=0):
# 判斷數值是否合法
judge = _notStd(num)
if judge:
return judge
if result == 0: # 首次調用
num = sorted(list(num)) # 從小到大排序
result = num[0] # 默認結果為最小值
for i in num:
if i % result != 0: # i模結果不為零
result = i % result # 結果設為這兩個值的模
return gcd(*num, result=result) # 遞歸
else:
return result # 返回最小值
# 最小公倍數
def lcm(*num, result=0):
# 判斷數值是否合法
judge = _notStd(num)
if judge:
return judge
if result == 0: # 首次調用
num = sorted(list(num)) # 從小到大排序
result = num[-1] # 默認結果為最大值
for i in num:
if result % i != 0: # 最大值模i不為零
result = i * result // gcd(i, result) # 最大值設為這兩個數的最大公倍數
lcm(*num, result=result) # 遞歸
else:
return result # 返回最大值
# 對素數進行歸納
def isSu(*num):
# 判斷數值是否合法
judge=_notStd(num, length=1)
if judge:
return judge
# 判斷是否是素數
def su(x):
for i in range(2, x):
if x % i == 0: return False
else:
return True
# 一個參數時直接輸出判斷結果
if len(num) == 1:
return ["合數", "素數"][su(num[0])] # False=0 True=1
# 多個參數對參數進行歸納
else:
result = {"素數": [], "合數": []}
for x in num:
if su(x):
result["素數"].append(x)
else:
result["合數"].append(x)
return result
if __name__ == "__main__":
print(gcd(6, 8))
print(gcd(63, 18))
print(lcm(15, 6, 3))
print(lcm(24, 28))
print(isSu(3, 8, 6, 4, 9))
print(isSu(3))


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved