输入两个正整数m和n,求其最大公约数和最小公倍数。
两个整数
最大公约数,最小公倍数
5 7
1 35
最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个,与最大公约数相对应的概念是最小公倍数。
如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。如只能说16是某数的倍数,2是某数的约数,而不能孤立地说16是倍数,2是约数。
几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。
几个数共有的倍数叫做这几个数的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数。
比如1:12、16的公约数有1、2、4,其中最大的一个是4,则4是12与16的最大公约数。
比如2:12、18的公约数有1、2、3、6,其中最大的一个是6,则6是12与18的最大公约数。
比如3:20、40的公约数有1、2、4、5、10、20,其中最大的一个是20,则20是20与40的最大公约数。
18、20的最小公倍数是180
12、18的最小公倍数是36
20、40的最小公倍数是40
令两个数的最小值为最大公约数,然后我们再用两个数分别除去这两个数的最小值,如果都能整除,则就是最大公约数,否则就自减1再用两个数分别除去,判断是否能整除,不能就自减1,一直循环下去直到找到都能被整除的数。(最坏的情况就是找到1停止)
输入两个数 m,n为5,7, tmp=5,m%tmp and n%tmp,
不能整除,tmp=4
不能整除,tmp=3
不能整除,tmp=2
不能整除,tmp=1
能整除
输出:最大公约数为 1
比如12、18这两个数,这两个数的最大值是18,则定义变量tmp=18,然后判断变量tmp是否都能整除12、18。
tmp=18,不能整除12、18,自加1
tmp=19,不能整除12、18,自加1
tmp=20,不能整除12、18,自加1
tmp=21,不能整除12、18,自加1
tmp=22,不能整除12、18,自加1
········
tmp=36,都能整除12、18
所以找到最小公倍数了,12,18的最小公倍数是36
a = 3
b = 5
print(str(a) + ' ' + str(b))
这段代码首先将变量a和b分别转换为字符串,然后使用字符串拼接操作符(+)将它们连接起来,并在中间添加一个空格。最后,通过print函数将结果输出到控制台。运行代码,将会得到以下输出:
3 5
这种方法简单直接,适用于简单的输出需求。但是,如果要输出多个变量,代码会变得冗长且难以维护。
a = 3
b = 5
print('%d %d' % (a, b))
在这段代码中,%d表示整数类型的占位符,%后面的小括号中的a和b分别是要替换的变量。当代码运行时,%d会被变量的值替换,最后结果将会被输出到控制台。运行代码,将会得到以下输出:
3 5
使用字符串格式化的方法可以简化代码,并且可以更灵活地控制输出的格式。
a = 3
b = 5
print(f'{a} {b}')
在这段代码中,花括号中的变量名a和b将会被对应的值替换。运行代码,将会得到以下输出:
3 5
m,n = map(int,input().split())
# -----------最大公约数----------
# 1.暴力求解
tmp = m if m < n else n
while(1):
if m % tmp == 0 and n % tmp == 0:
break
else:
tmp-=1
print(tmp)
#更相减损法
tmp = 0
while(m != n):
if m > n:
tmp = m-n
m = n
n = tmp
else:
tmp = n-m
m = n
n = tmp
print(tmp)
#辗转相除法
tmp = 1
while(m != 0):
tmp = n % m
n = m
m = tmp
print(n)
#递归
def fun(m, n):
if m > n:
return fun(m-n, n)
elif m < n:
return fun(m, n-m)
else:
return m
print(fun(m, n))
# -----------最小公倍数----------
#暴力求解
tmp = m if m>n else n
while(1):
if (tmp % m ==0 and tmp%n == 0):
break
else:
tmp+=1
print(tmp)
#公式法
print(int(m*n/tmp))
x=tmp
y=int(m*n/tmp)
print(str(x) + ' ' + str(y))
print("%d %d" %(x,y))
print(f'{x} {y}')