python自学做题记录之逆解最小公倍数和最大公约数

题目描述:
我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数。今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,输出它们之和最小的那组。注:所给数据都有解,不用考虑无解的情况。

例如:a=3, b = 60

则输出:12 15

这题思路反着来
记着一个公式,最大公约数 x 最小公倍数=a * b
所以运用暴力解题法,两个循环遍历就行
这里可以有个范围,数据最小只能是a,最大只能是b,所以循环的时候只需要a到b就可以了
因为可能有多个解,所以可以用字典去判断哪对解才是和最小的解,想要的结果直接用f拼接就行,不过有一个小细节,循环是不断进行的,遇到解时i和k的值是可以互换的,而i,k都是递增的,所以拼接的时候先k再i而不是先i再k

def solve_it():
    dic={
     }
    for i in range(a,b):
        for k in range(a,b):
            if i*k==a*b:
                dic[i+k]=f'{k} {i}'
    lst=dic.keys()
    xiao=min(lst)
    return dic[xiao] 

print(solve_it())  

你可能感兴趣的:(python)