Problem A: 数论只会 GCD

题目

描述

话说张无忌这天无意中翻看了《世界数学奥林匹克解题大辞典-数论卷》,看到了最大公约数和最小公倍数的解法,内功深厚的他瞬间发现了二者之间的关联,现在他来考你计算两个数的最大公约数和最小公倍数的乘积,你能通过考验吗?

输入

一行两个数 a 和 b,题目保证 a 和 b 在 64 位整型

输出

这两个数的最大公约数和最小公倍数乘积,题目保证输出结果在 64 整型范围内。

样例输入

2 6

样例输出

12

提示

2 和 6 的最小公倍数为 6 ,最大公约数为 2 所以答案为 12.


思路:

最小公倍数求法:

最小公倍数=两个数乘积/最大公约数

求最大公约数求法:

  1. 整数A对整数B进行取整, 余数用整数C来表示 举例: C = A % B
  2. 如果C等于0,则C就是整数A和整数B的最大公约数
  3. 如果C不等于0, 将B赋值给A, 将C赋值给B ,然后进行 1, 2 两步,直到余数为0, 则可以得知最大公约数

def fun(num1, num2):
    if num1 < num2:
        num1, num2 = num2, num1
    vari1 = num1 * num2
    vari2 = num1 % num2
    while vari2 != 0:
        num1 = num2
        num2 = vari2
        vari2 = num1 % num2
    vari1 /= num2
    print(int(num2*vari1))

l=[int(x) for x in input().split()]
fun(l[0], l[1])

猜你喜欢

转载自blog.csdn.net/qq_42906486/article/details/84332945
今日推荐