首先附上代码:
m = eval(input('请输入第一个数:'))
n = eval(input('请输入第二个数:'))
k = m
l = n
if m > n:
while n != 0:
a = m % n
m = n #又以较小的数作为较大的数除于余数
n = a
b = (k * l) // m
print('最大公约数%d\n最小公倍数%d'%(m,b))
else:
while m != 0:
a = n % m
n = m
m = a
b = (k * l) // n
print('最大公约数%d\n最小公倍数%d'%(n, b))
整体的思路就是:用较大的数a去除于较小的数b,前提是两者都不为0,然后用所得余数c作为下一轮中较小的数,之前较小的数b作为除数,一直循环到作为被除数为0的时候,停止,返回较大的数此时较大的数即为最大公约数。最小公倍数为两数之积除于最大公约数。
也许大家觉得有点麻烦,但是可以自己在草稿本上写一下进行验证。
拿4和14来说,14>4,求余等于2,此时的2作为新的值赋在分母上,此时分子为4,求余等于0,循环结束,此时k=14,l=4,最小公倍数即为14*4/2=28,最大公约数即为2
关于代码,第一行eval可以换成int或者float,但不可以为str。\n代表换行,输出可以使用format输出,或者按照上面代码的形式