python学习---计算最大公约数和最小公倍数

python学习---计算最大公约数和最小公倍数

最小公倍数:lcm=(a*b)/gcd(a,b)

辗转相除法

辗转相除法是最常用的方法,核心就是从两个数相除,然后取其余数,即余数赋值给b,b的值赋给a,直至a%b为0。
代码实现:

def gcd(a, b):
	if a < b:
		a, b = b, a
    while b != 0:
        temp = a % b
        a = b
        b = temp
        
    return a

num1 = int(input())
num2 = int(input())

print("{},{}的最大公约数是:{}".format(num1, num2, gcd(num1, num2)))

stein算法

stein算法描述:
对于整数a、b,保证a>b
如果a=0,结果返回b;如果b=0,结果返回a
如果a、b都是偶数,返回a/2、b/2
如果a是偶数,返回a/2,b
如果b是偶数,返回a,b/2
如果a、b均不是偶数,返回b-a,b
最后重复执行此步骤。
代码实现:

def st(a, b):
    if a < b:
        a, b = b, a
    if b == 0:
        return a
    if (a % 2 == 0) and (b % 2 == 0):
        return 2 * st(a // 2, b // 2)
    elif (a % 2 == 0) and (b % 2 != 0):
        return st(a // 2, b)
    elif (b % 2 == 0) and (a % 2 != 0):
        return st(a, b // 2)
    elif (a % 2 != 0) and (b % 2 != 0):
        return st(a-b, b)

num1 = int(input())
num2 = int(input())

print("{},{}的最大公约数是:{}".format(num1, num2, st(num1, num2)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值