Python-小乐乐与欧几里得

输入描述:
每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)
输出描述:
对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

提交了两段代码都提示运行超时(限时2s),应该是判断最大公约数部分的循环太浪费时间了,但是除了这样之外,以我目前的知识储备实在是想不出来了。

n,m=map(int,input().split())
ls=[] 
if n%m==0:
    a=m
    b=n
else:
    if n>m:
        for i in range(1,m):
            if n%i==0 and m%i==0:
                  ls.append(i)
    else:
        for i in range(1,n):
            if n%i==0 and m%i==0:
                  ls.append(i)
    a=max(ls)
    b=int(n*m/a)
c=a+b
print(c)
n,m=map(int,input().split())
ls=[]
if n>m and n%m==0:
    a=m
    b=n
elif n<m and m%n==0:
    a=n
    b=m
elif n>m:
    for i in range(1,m):
        if n%i==0 and m%i==0:
            ls.append(i)
    a=max(ls)
    b=int(n*m/a)
elif n<m:
    for i in range(1,n):
        if n%i==0 and m%i==0:
            ls.append(i)
    a=max(ls)
    b=int(n*m/a)
elif m==n:
    a=m
    b=n
# print(a,b)
c=a+b
print(c)

你可能感兴趣的:(刷题记录,python,leetcode)