LC 878. 第 N 个神奇数字
题面
一个正整数如果能被 a
或 b
整除,那么它是神奇的。
给定三个整数 n
, a
, b
,返回第 n
个神奇的数字。因为答案可能很大,所以返回答案 对 10^9 + 7
取模 后的值。
题解
- 假设最终答案为$x$,如果$x \% a = 0$,则说明有$k= \frac{x}{a}$个可以被$a$整除的数字,有$m = \frac{x}{b}$个可以被$b$整除的数字
- $k + m = n$?
- 有重复数字需要去除,令$p = lcm(a, b)$,则有$min(\frac{a \times k}{p}, \frac{b \times m}{p})$个重复计算的数字
- 因此一定有$k + m - min(\frac{a \times k}{p}, \frac{b \times m}{p}) = n$
- 若令$f(x) = k + m - min(\frac{a \times k}{p}, \frac{b \times m}{p})$, $f(x)$单调
- 二分答案(若$x \% b =0$, 同理)
代码
1 | const int mod = 1e9 + 7; |