CF920 G. List Of Integers

\(t\) 组询问,求第 \(k\) 个大于 \(x\) 且与 \(P\) 互质的数。

看到第 \(k\) 大这个东西,首先想到二分答案。

令当前的二分中点为 \(m\),那么如果 \([x + 1, m]\) 中与 \(p\) 互质的数大于等于 \(k\) 个,往下缩小二分范围。否则往上缩小二分范围。

同时,求 \([x + 1, m]\) 中与 \(p\) 互质的数的数量可以前缀和转化为 \([1, m]\) 中与 \(p\) 互质的数的数量减去 \([1, x]\) 中与 \(p\) 互质的数的数量。那么现在问题就变成了:

\([1, x]\) 中有多少数与 \(p\) 互质。

这个东西没法直接求。考虑容斥。

\(p\) 质因数分解。那么一个整数 \(q\)\(p\) 不互质当且仅当将 \(q\) 质因数分解后,存在与 \(p\) 相同的质因子。那么,我们可以 dfs 枚举 \(p\) 的每一个质因子是否是 \(q\) 的质因子。若令选择的所有质因子的乘积为 \(t\),那么 \(\left \lfloor \dfrac xt \right \rfloor\) 即为满足这个条件的 \(q\) 的数量。

然后做容斥。如果总共选择了偶数个质因子,将答案加上 \(\left \lfloor \dfrac xt \right \rfloor\)。反之减去 \(\left \lfloor \dfrac xt \right \rfloor\)

代码

posted @ 2024-02-01 12:40  2huk  阅读(28)  评论(0)    收藏  举报
2048 Game
Score
0
Best
0