class Solution:
def nthMagicalNumber(self, n: int, a: int, b: int) -> int:
MOD = 10 ** 9 + 7
l = min(a, b)
r = n * min(a, b)
c = lcm(a, b)
while l <= r:
mid = (l + r) // 2
cnt = mid // a + mid // b - mid // c
if cnt >= n:
r = mid - 1
else:
l = mid + 1
return (r + 1) % MOD
为什么返回的是r+1?
因为当cntn的时候,mid满足条件。
当cntn时,r=mid-1,所以mid=r+1
为什么可以用二分查找?
因为mid // a + mid // b - mid // c
单调不递减