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))




发布了51 篇原创文章 · 获赞 5 · 访问量 2149

猜你喜欢

转载自blog.csdn.net/weixin_44659084/article/details/103297681