GCD & LCM Inverse

本篇介绍一种算法,通过给定的两数最大公约数(GCD)及最小公倍数(LCM),求解这两数的具体数值,且当存在多组解时输出两数之和最小的一组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目描述】

给定两个数的最大公约数和最小公倍数,求出这两个数,如果存在多个解,要求输出两数和最小的解。

【输入描述】

输入两个整数,分别表示最大公约数和最小公倍数。

【输出描述】

输出两个整数,表示答案。

【输入样例】

3 60

【输出样例】

12 15

转载于:https://www.cnblogs.com/Ackermann/p/5993605.html

欧几里得算法(Euclidean Algorithm),也称为辗转相除法,是一种用于求解两个正整数最大公约数的有效算法。在Python中,我们可以这样实现: ```python def gcd(a, b): """ 计算两个整数的最大公约数(GCD) :param a: 第一个整数 :param b: 第二个整数 :return: a和b的最大公约数 """ while b != 0: a, b = b, a % b return a # 示例 print(gcd(48, 18)) # 输出:6 ``` 为了扩展到寻找两个数的最小公倍数(LCM),可以利用公式 `LCM(a, b) = abs(a * b) / GCD(a, b)`。以下是计算LCM的函数: ```python def lcm(a, b): """ 计算两个整数的最小公倍数(LCM) :param a: 第一个整数 :param b: 第二个整数 :return: a和b的最小公倍数 """ return abs(a * b) // gcd(a, b) # 示例 print(lcm(48, 18)) # 输出:144 ``` 接下来,我们来实现一个函数找给定数在一定范围内的模逆元。首先,需要引入`math`模块里的`gcd`函数: ```python import math def mod_inverse(x, m): """ 找到x在模m下的逆元 :param x: 需求逆元的数 :param m: 模数 :return: 如果存在,则返回x的逆元,否则返回None """ # 根据欧几里得算法计算gcd g = math.gcd(x, m) # 如果x和m互质,那么x的逆元存在 if g == 1: return pow(x, m - 2, m) else: return None # 示例 inverse = mod_inverse(7, 11) if inverse is not None: print(f"7在模11下的逆元是 {inverse}") else: print("7和11不是互质的,因此7在11下没有逆元") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值