基本要求:1.程式風格良好(使用自定義注釋模板),兩種以上演算法解決最大公約數問題,提供友好的輸入輸出。
提高要求:1.三種以上演算法解決兩個正整數最大公約數問題。
2.求3個正整數的最大公約數和最小公倍數。
#輾轉相除法
deffun1
(a,b):
if a#如果aa,b = b,a
t = a%b #大數除小數得乙個餘數賦給t
p = a*b #將兩數的乘積賦給p
while t!=0:
a = b # 當餘數不為0時,將b賦給a
b = t #將餘數賦給b
t = a%b #繼續將a除以b的餘數賦給t
print( "相除法得最大公約數為:", b ) #當餘數為0時,輸出b即為最大公約數
print( "相除法得最小公倍數:", int(p/b) ) #用兩數乘積除以最大公約數即為最小公倍數
#相減法
deffun2
(a,b):
p = a*b
while a!=b :
if a>b :
a = a-b #若a>b,將a-b的值賦給a
else :
b = b-a
print("相減法得最大公約數為:", a) #當a==b時,輸出a即為最大公約數
print("相減法得最小公倍數為:", int(p/a)) #用兩數乘積除以最大公約數即為最小公倍數
#列舉法
deffun3
(a,b):
p = a*b
t = a #將a值賦給t
while t>0 :
if a%t==0
and b%t==0 : #若a除以t的餘數和b除以t的餘數都為0時,跳出迴圈
break
t=t-1
#t>0時,每迴圈一次,t值減一
print("列舉法得最大公約數為:", t) #當跳出迴圈時,輸出t值即為最大公約數
print("列舉法得最小公倍數為:", int(p / t)) #用兩數乘積除以最大公約數即為最小公倍數
#用列舉法求三個正整數的最大公約數和最小公倍數
deffun4
(a,b,c):
p = a*b*c
if aelse :
min = b
if min>c :
min = c #找出輸入的a,b,c三個數中的最小的數賦給min
while min>0 :
if a%min==0
and b%min==0
and c%min==0 : #若a除以的餘數和b除以min的餘數和c除以min都為0時,跳出迴圈
break
min=min-1
#>0時,每迴圈一次,min值減一
print("列舉法得三個數的最大公約數為:", min) # 當跳出迴圈時,輸出min值即為最大公約數
print("列舉法得三個數的最小公倍數為:", int(p / min)) # 用兩數乘積除以最大公約數即為最小公倍數
#定義乙個主函式
defmain
(): a = int(input('請輸入第乙個整數》'))
if a>0: #判斷輸入的數是否為正整數
b = int(input('請輸入第二個整數》'))
if b>0:
fun1(a,b) #呼叫輾轉相除法求最大公約數和最小公倍數
fun2(a,b) #呼叫相減法求最大公約數和最小公倍數
fun3(a,b) #呼叫列舉法求最大公約數和最小公倍數
else:
print('輸入錯誤')
else :
print('輸入錯誤') #若輸入的不是正數,提示輸入錯誤
c = int(input('請輸入第三個整數》'))
if c>0 :
fun4(a,b,c)
else :
print('輸入錯誤')
if __name__ == '__main__':
main() #執行主函式
求最大公約數,最小公倍數
歐幾里德遞迴演算法,大數對小數取餘直到小數為0,大數為最大公約數 param m param n return static int maxcommondivisor euclid recursion int m,int n return m 劉徽兩數相減直到兩數相等,等數為最大公約數 param ...
求最大公約數和最小公倍數
本篇文章中求最大公約數的方法是輾轉相除法,又稱歐幾里德演算法 方法是用較大的數除以較小的數,求得餘數,將餘數變成除數,除數變成被除數,重複這個過程,直到餘數變成0。而求最小公倍數的方法則是用原本兩個數的乘積除以最大公約數。define crt select no warings include in...
求最大公約數和最小公倍數
輾轉相除法求最大公因數 輾轉相除法 簡單來說 兩個數,用較大的數除以較小的數,得到第一餘數,在用較小的數除以第乙個餘數,得到第二餘數,在用第二個餘數除以第一餘數,重複過程,直到到餘數為0 那麼最後乙個餘數就是這兩個數的最大公約數 舉例說明 a 36,b 10 1.36除以10得3,餘6 2.10除以...