最大公约数和最小公倍数(Python)

题目描述

最大公约数和最小公倍数

本题目要求读入2个正整数A和B,然后输出它们的最大公约数和最小公倍数。

输入格式:

输入在一行中给出2个不超过10000的正整数A和B。

输出格式:

对每一组输入,在一行中输出最大公约数和最小公倍数,用逗号分隔。

输入样例:

2 3

输出样例:

1,6


解题思路

要求两个数的最大公约数和最小公倍数,可以通过数学中的辗转相除法来实现。

辗转相除法,也称为欧几里德算法,是一种用于计算两个数的最大公约数(GCD)的方法。

该算法基于以下观察:

  • 如果 a a a 能整除 b b b ,那么 b b b 就是 a a a b b b 的最大公约数。
  • 如果 a a a 不能整除 b b b ,那么 a a a b b b 的最大公约数等于 b b b a % b a\%b a%b a a a 除以 b b b 的余数)的最大公约数。

最大公约数(Greatest Common Divisor,GCD)

根据这个观察,我们可以使用迭代的方式来逐步计算最大公约数。具体步骤如下:

  1. 通过取余运算,将ab替换为ba % b的值。
  2. 重复上述步骤,直到b = 0,此时a的值就是最大公约数。

辗转相除法的时间复杂度为 O ( l o g ( m a x ( a , b ) ) ) O(log(max(a, b))) O(log(max(a,b))) ,其中 a a a b b b 分别是输入的两个数。这使得它成为求解最大公约数的高效算法。

最小公倍数(Least Common Multiple,LCM)

最小公倍数可以通过最大公约数来计算。最小公倍数等于两个数的乘积除以最大公约数。即:

L C M = ( A × B ) ÷ G C D LCM = (A \times B) \div GCD LCM=(A×B)÷GCD

代码中的交换变量和更新变量

  • a, b = b, a % b 是Python中的一种语法,通常用于交换两个变量的值。
    这条语句先计算a % b的值,并将结果保存在一个临时变量中。然后,它将b的值赋给a,将临时变量的值赋给b,完成了两个变量的值的交换。

  • t = b;b = a % b;a = t 也是辗转相除法的一种实现方式。
    这条语句先将b的值赋给一个临时变量t,然后将a % b的值赋给b,最后将临时变量t的值赋给a

a, b = b, a % bt = b; b = a % b; a = t 这两段代码实际上是等价的,都是用于在辗转相除法中交换变量和更新变量的值。

这两种写法的效果是一样的,都能够正确地交换ab的值,并计算出ab的新值。

使用a, b = b, a % b 这种写法可以简化代码,通过一行语句完成交换和更新操作。而使用t = b; b = a % b; a = t 这种写法则是分开进行三个步骤,更加明确地展示了每个操作的含义和顺序

无论选择哪种写法,最终都能正确地实现辗转相除法的功能。选择哪种写法主要取决于个人习惯和代码风格的偏好。


Python代码实现

# 计算最大公约数
def gcd(a, b):
    while b != 0:
        # t = b
        # b = a % b
        # a = t
        a, b = b, a % b
    return a

# 计算最小公因数
def lcm(a, b):
    return a * b // gcd(a, b)

a, b = map(int, input().split())

g = gcd(a, b)
l = lcm(a, b)

print(f"{g},{l}")
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值