⭐在家里总是很懒惰,因为大部分母亲都做好了,不像在外面...过年最大的时就是教母亲认字,算是跟上时代,给她买了智能手机,看看电视、刷刷视频,教一个字认十几遍,仍然不记得,可能小时候自己比这还差,坚持吧,总会有收获。🌈⭐
问题描述:编写一个Python程序,使用递归计算两个数的最大公约数和最小公倍数。
程序代码:
# 最大公约数
def gcd(a, b):
if a > b:
if a % b == 0:
return b
else:
return gcd(b, a%b)
else:
if b % a == 0:
return a
else:
return gcd(a, b%a)
# 最小公倍数
def lcm(a,b,gcd):
return int(a*b/gcd)
a = int(input("请输入数字a:"))
b = int(input("请输入数字b:"))
print(str(a)+'和'+str(b)+'的最大公约数为:',gcd(a,b))
print(str(a)+'和'+str(b)+'的最小公倍数为:',lcm(a,b,gcd(a,b)))
程序分析:
1)求最大公约数(辗转相除法)
首先通过比较得出a、b两数谁比较大当作除数,另一个作为被除数,然后判断结果是否为0,如果为0,则被除数就是最大公约数,若不为0,则调用函数递归进行被除数÷余数。假设有两个整数a,b且a>b,那么计算流程为:
① a%b得余数c;
②若c=0,则b为两数的最大公约数;
③若c≠0,则a=b,b=c,再回去执行①。
2)求最小公倍数
最小公倍数=两数的乘积÷最大公约数。最终目的还是求最大公约数。当然还有其他的计算方法,遍历枚举从1开始,假设有两个整数a,b,c为1到正无穷,那么计算流程可以如下:
① a*c%b = 0,返回a*c
② a*c%b ≠ 0,则c自加1,继续调用函数。