欧几里得求最大公约数/python

来源:互联网 发布:解数独软件 编辑:程序博客网 时间:2024/06/05 18:22
这个个求最大公约数的函数,利用了欧几里得算法。

欧几里得法求最大公约数:
求a和b的最大公约数
记 a mod b=c ,即a=kb+c 
设a b的最大公约数为d,则a=m*d b=n*d,m和n互质。
c=a-kb=md-knd=(m-kn)d,m和n互质,则n和m-kn互质,c和b的最大公约数也是d
所以: "a和b(a>b)的最大公约数等于b和a Mode b的最大公约数",递归或迭代计算,直到余数为0,此时除数为最大公约数


也可以这样理解:
a=m*d b=n*d,m和n互质,c=a-b=(m-n)*d,m-n 和 n互质,

即,"a 、b(a>b)的最大公约数等于 b 和 a-b 的最大公约数。"递归或迭代计算,直到两数相等,此时的值为最大公约数。


def gcd(big,small):
    remainder = big % small
    if remainder == 0:
        return small
    else:
        gcd(small,remainder) --->这里没有加return ,函数会返回None,因为执行if判断后else默认返回None

def gcd(big,small):
    remainder = big % small
    if remainder == 0:
        return small
    else:
       return gcd(small,remainder) 
0 0