ABC335G

题面

给定 \(N\) 个正整数 \(A_1,A_2,\cdots,A_n\) 和一个素数 \(P\)。求满足以下条件的二元组 \((i,j)\) 的个数。

  • \(1\leq i,j\leq N\)

  • 存在正整数 \(k\),使得 \(A_i^k\equiv A_j\pmod P\)

数据范围:$ 2\ \leq\ N\ \leq\ 2\ \times\ 10^5 , P\ \leq\ 10^{13}$。

题解

发现 \(A_i^k\equiv A_j\pmod P\) ,可以想到求出 \(P\) 的原根 \(p\),那么就可以把 \(A_i^k\equiv A_j\bmod P\to kb_i=b_j\bmod P-1\)

但是你需要对每一个 \(A_i\) 求出 \(b_i\) 使 \(p^{b_i}\equiv A_i\mod P\),也就是做 \(N\) 次 BSGS,时间复杂度是不对的。

这时就有另一种转化方法,求 \(A_i\) \(b_i\)

阶:满足 \(a^n\equiv 1\pmod m\) 的最小正整数 \(n\) 就是 \(a\) 在模 \(m\) 下的阶。

这样 \(A_i^k\equiv A_j\to A_{i}^{kb_i}\equiv A_j^{b_i}\to 1\equiv A_j^{b_i}\),此时若 \(b_i|b_j\) 那么就是满足的。

如何求阶?

一个性质,就是 \(x\)\(P\) 意义下的阶一定是 \(\varphi(P)\) 的因数,那么我就可以枚举 \(P-1\) 的所有质因数 \(p_i\),然后看\(x\)\(\frac{now}{p_i}\) 次方是否还是 \(1\),如果是则 \(now\leftarrow \frac{now}{p_iu}\)

求出所有 \(b_i\) 后,因为 \(P\) 的因数个数最大是 \(10^4\) ,那么可以 \(O((10^4)^2)\) 的复杂度去一一判断,然后就解决了。

启发

  • 阶的一个高级运用。
posted @ 2024-02-29 22:37  qwq_123  阅读(4)  评论(0编辑  收藏  举报