辗转相除法:
现在需要去求解a和b的最大公约数k。可知a=m*k,b=n*k,a=t*b+r
之后带a=m*k,b=n*k到a=q*k+r中r=(m-n*t)*k所以可知gcb(a,b)=gcb(b,r)
def gcd(a,b):
t=0
if b>a:#交换顺序
t=b
b=a
a=t
print(a,b)
if a%b!=0:#辗转相除
r=a%b
a=b
b=r
print('最大公约数为', r)
elif a%b==0:
print('最大公约数为',b)
更相减损法:
现在需要去求解a和b的最大公约数k。可知a=m*k,b=n*k,a=t*b+r
a-b=(m-n)*k,gcb(a,b)=gcb(b,a-b),一直到相等的时候,该数为最大公约数
为什么判断条件不是a%b=!0呢,因为最大公约数是唯一的,6%3也是0,存在错误个例
def gcd(a,b):
if a % b == 0:
print('最大公约数为',b)
while a!=b:
if a>b:
a=a-b
elif a<b:
b=b-a
print('最大公约数为',a)