给定x,如何寻找满足gcd(a,b)+lcm(a,b)=x且差值最小的a、b?
问题要求
寻找两个数𝑎和𝑏,需满足以下条件:
- 它们的最大公约数(gcd)与最小公倍数(lcm)之和等于给定数𝑥
- 𝑎 ≤ 𝑏
- 两数的差值尽可能小
原始Python代码
import math def prime_factors(num): ret = [] prime = 1 while num % 2 == 0: prime *= 2 num = num / 2 prime > 1 and ret.append(2) for i in range(3, int(math.sqrt(num)) + 1, 2): prime = 1 while num % i == 0: prime = prime * i num = num / i prime > 1 and ret.append(i//1) if num > 2: ret.append(num) return ret def find_ab(gcd,lcm): """ """ return gcd,lcm if __name__ == "__main__": t = int(input()) # 测试用例数量 while t: x = int(input()) factors = prime_factors(x) print(x) print("===") for n in factors: gcd,lcm = n,x-n print("----") print(find_ab(gcd,lcm)) t-=1
内容的提问来源于stack exchange,提问作者Mansouri Rayen
相关产品推荐
相关产品推荐

