Loading

在线 $\Theta(1)$ 逆元

最近看到这个题,想到了一种比较简单的做法。

首先,我们考虑给 \(x\) 乘以一非零整数 \(u\),如果我们能求出 \(\frac{1}{xu}\),我们就可以通过再乘以 \(u\) 得到答案。

考虑让 \(u\)\(xu \bmod p\) 比较接近 \(0\),预处理 \(|k|\) 比较小的所有 \(\frac{1}{k}\)

考虑分块:设 \(x = aB+c(0 \le c<B)\),对于 \(aB\) 找到一个满足条件的 \(u\)。考虑令 \(B = p^{1/3}\)\(u\) 不超过 \(\Theta(p^{1/3})\),且 \(|aBu|\) 不超过 \(\Theta(p^{2/3})\)

这样,\(xu = (aBu + cu) \bmod p\) 的绝对值就是 \(\Theta(p^{2/3})\) 级别的了。

怎么预处理 \(aB\) 中的 \(u\) 呢?我们的问题可以看成是找到一组 \((u,v)\) 使得 \(\frac{v}{u} \equiv aB (\bmod p)\),使得 \(|v| \le p^{2/3}\)\(u \le p^{1/3}\)。而根据 黄忠庆功宴 中的结论,这是一定可以找到的!

(证明大概就是对要 check 的 \(x=aB\) 做抽屉原理,\(\{ax+b\} (a \le p^{1/3},b \le p^{2/3})\) 中如果存在相同的一对数那我们就找到了合法解)

但是怎么样找到这样的 \((u,v)\) 呢?我们枚举 \(u\),找到所有的 \(k\) 使得 \(|ukB| \le p^{2/3}\)。由于 \(uB\) 不是很大,所以我们每次跳找下一个合法 \(k\) 即可。

稍加卡常的 aclink

posted @ 2023-05-17 12:36  zhoukangyang  阅读(2596)  评论(0编辑  收藏  举报