大家好,小编为大家解答用python求两个数的最大公约数和最小公倍数的问题。很多人还不知道如何用python求两个数的最小公倍数,现在让我们一起来看看吧!
Source code download: 本文相关源码
公约数:亦称“公因数”,它是一个能被若干个整数同时均整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数python自动化运维应用。对任意的若干个正整数,1总是它们的公因数。
公倍数:公倍数是指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。公倍数中最小的,就称为这些整数的最小公倍数。
常见求法有:质因数分解法、短除法、辗转相除法、更相减损法。
详情见:
最大公约数
最小公倍数
以下用质因数分解法
使用集合
x=int(input("请输入第一个数:"))
list1=[]
for i in range(1,x+1):
if x%i==0:
list1.append(i) #list1.append(int(x/i))效果一样
if i==x:
A=set(list1)
print(A)
break
y=int(input("请输入第二个数:"))
list2=[]
for i in range(1,y+1):
if y%i==0:
list2.append(i)
if i==y:
B=set(list2)
print(B)
break
a=max(A&B)
print("%d和%d最大公约数是%d"%(x,y,a))
c=x
while True:
if c%x==0 and c%y==0:
print("%d和%d最小数公倍数是%d"%(x,y,c))
break
c+=1
另一种写法
L=[]
a=int(input("请输入一个数"))
b=int(input("请再输入一个数"))
if a>b:
smaller=b
else:
smaller=a
for i in range(1,smaller+1):
if(a%i==0) and (b%i==0):
L.append(i)
continue
n=L[-1]
print("%d和%d的最大公约数是%d"%(a,b,n))
c=a #print("%d和%d的最小公倍数是%d"%(a,b,a*b//n))
while True:
if c%a==0 and c%b==0:
print("%d和%d的最小公倍数是%d"%(a,b,c))
break
c+=1
改写成函数
def de_factor(x):
'''分解因数'''
list=[]
for i in range(1,x+1):
if x%i==0:
list.append(i) #list1.append(int(x/i))效果一样
if i==x:
A=set(list)
break
return A
def min_max_muldiv(x,y):
a=max(de_factor(x)&de_factor(y))
c=x
while True:
if c%x==0 and c%y==0:
b=c
break
c+=1
return "%d和%d最大公约数是%d\n%d和%d最小数公倍数是%d"%(x,y,a,x,y,b)
if __name__ == '__main__':
print(min_max_muldiv(25,55))
def min_max_muldiv(a,b):
L=[]
if a>b:
smaller=b
else:
smaller=a
for i in range(1,smaller+1):
if(a%i==0) and (b%i==0):
L.append(i)
continue
n=L[-1]
c=a #print("%d和%d的最小公倍数是%d"%(a,b,a*b//n))
while True:
if c%a==0 and c%b==0:
v=c
break
c+=1
return "%d和%d的最大公约数是%d\n%d和%d的最小公倍数是%d"%(a,b,n,a,b,v)
if __name__ == '__main__':
print(min_max_muldiv(25,55))