题解 | #游游的最小公倍数#(Python3)
游游的最小公倍数
https://www.nowcoder.com/practice/385c7aa397e54bb58f36286ab0d65156
import math # 最大公约数 def gcd(n, m): return math.gcd(n, m) # 最小公倍数 def lcm(n, m): return n*m//gcd(n,m) # 询问次数 t = int(input()) for _ in range(0, t): # a,b两数和 n = int(input()) # // 是地板除(floor division)的运算符。结果只取整数部分 a = n // 2 b = n - a # 最小公约数是1 while(gcd(a,b)!=1): a -= 1 b += 1 print(a, b)
- a、b尽可能接近的话,最小公倍数lcm会更大,a、b互质时最大,为ab
- 相邻两个素数间隔不会太大,很快就能枚举出来(10^13以内最大素数间隔是777)
- 777*10^5还是可以枚举的,空间给200个(C++)
- // 是地板除(floor division)的运算符。它用于计算两个数相除后的结果,并返回不大于结果的最大整数。具体来说,a // b 的结果是删除小数点后的部分,即取结果的整数部分,但这个整数部分是向下取整的(即向负无穷大方向取最接近的整数)。
- python3有gcd,没有lcm要自己写