python求公约数和公倍数,python最大公约数gcd

大家好,小编来为大家解答以下问题,python最大公约数最小公倍数,python求公约数和公倍数,现在让我们一起来看看吧!

Python:三种方法计算最大公约数和最小公倍数

题目:求取任意两个非负数(至多一个数为0)的最大公约数和最小公倍数;
参考资料:Python解决求最大公约数和最小公倍数问题 link;最小公约数(欧几里得算法&stein算法) link

1.穷举法

两个非负数(至多一个数为0)的存在情况:其中一个数为0;两个数均为正数。当两个数中有一个数为0时,最大公约数为另一个非零数;当两个均为正数时,选择较小的正数(两个数的最大公约数肯定小于或等于较小的数),从大到小进行列举,得到的公约数即为最大公约数学python哪本书好

最小公倍数=两数乘积/最大公约数

实现代码如下:

// An highlighted block
#输入参数
#最大公约数
def gcd_exhaus(a,b):
    if a==0 and b==0:
        print("请重新输入参数")
    #break
    elif min(a,b)==0:
        return max(a,b)
    elif a==b:
        return a
    else:
        a,b=max(a,b),min(a,b)
        for i in range(b,0,-1):  #从大到小列举
            if a%i==0 and b%i==0:
                return i
                break
            else:
                continue

gcd_exhaus(8,4)

#最小公倍数
def lcm_exhaus(a,b):
    return a*b/gcd_exhaus(a,b)

lcm_exhaus(8,4)   

2.欧几里德法

欧几里德法也称辗转相除法,假设有两个整数a、b,且满足条件a>b,若a%b不为0,则对a、b求最大公约数等价于对b、(a%b)求最大公约数。依此类推,直至两数可以整除。

实现代码如下:

// An highlighted block
#最大公约数
def gcd_euclid(a,b):
    if a==0 and b==0:
        print("请重新输入参数")
    #break
    elif min(a,b)==0:
        return max(a,b)
    else:
        a,b=max(a,b),min(a,b)
        if a%b==0:
            return b
        else:
            return gcd_euclid(b,a%b)
        
gcd_euclid(12,3)    

#最小公倍数
def lcm_euclid(a,b):
    return a*b/gcd_euclid(a,b)

lcm_euclid(12,3)

3.Stein算法

欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际效率上都是很好的。但当出现大素数时,欧几里德法则存在较大的缺陷。

Stein算法:
假设 A 1 = A , B 1 = B , C 1 = 1 A_1=A,B_1=B,C_1=1 A1​=A,B1​=B,C1​=1:
for n = 1 , 2 , 3 , . . . n=1,2,3,...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值