36_求最大公约数

示例:

输入:24

54

输出:6

1、欧几里得算法_辗转相除法

#辗转相除法

m=int(input("请输入第一个数:"))
n=int(input("请输入第二个数:"))
if m<n:#确保m>n
    t=m
    m=n
    n=t

r=m%n
while r!=0:
    r=m%n
    m=n
    n=r

print(f"最大公约数为{m}")
    

 2、更相减损法

(1)定义:可半者半之,补课班这,副置分母、分子之数,以少减多,更相减损,求其等也,以等数约之。

(2)注意:以少减多的意思,要确保差数值一定要大于0,所以引入abs函数实现

import math
#更相减损法
m=int(input("请输入第一个数:"))
n=int(input("请输入第二个数:"))
factor=1#因数
if m<n:
    t=m
    m=n
    n=t
#约简,可半者半之
while (m%2==0)and(n%2==0):
    factor=factor*2
    m=m//2
    n=n//2
#更相减损,求其等也
r=abs(m-n)
while n!=r:   
    m=n
    n=r
    r=abs(m-n)
print(f"最大公约数为{r*factor}")

 

posted @ 2023-02-17 13:50  New_Score  阅读(27)  评论(0)    收藏  举报