# 878. 第 N 个神奇数字

一个正整数如果能被 a 或 b 整除,那么它是神奇的。

给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 $10^9 + 7$ 取模 后的值。

示例 1:

输入:n = 1, a = 2, b = 3
输出:2

示例 2:

输入:n = 4, a = 2, b = 3
输出:6

提示:

  • 1 <= n <= $10^9$
  • 2 <= a, b <= 4 * $10^4$

# 题解

class Solution {
public:
const int MOD = 1e9 + 7;
int nthMagicalNumber(int n, int a, int b) {
long long l = min(a, b);
long long r = (long long) n * min(a, b);
int c = lcm(a, b);
while (l <= r) {
long long mid = (l + r) / 2;
long long cnt = mid / a + mid / b - mid / c;
if (cnt >= n) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return (r + 1) % MOD;
}
};

复杂度分析

  • 时间复杂度:$O (log (n*max (a,b)))$
  • 空间复杂度:$O (1)$