题解 cf gym 103261 D FFT Algorithm
用到一个很冷门的数论定理
【题意】
给定数字 \(m, k\) ,求一个数字 \(\omega\) 使得 \(\text{ord}_m(\omega)=2^k\) 。
\(\text{ord}_m(a)\) 表示数字 \(a\) 在群 \(<Z_m, \otimes_m>\) 下的阶,即 \(a^{\text{ord}_m(a)}\equiv 1\pmod m\wedge a^k\not\equiv 1\pmod m(0\leq k<\text{ord}_m(a))\)
【分析】
由 Carmichael 函数的定义得,对于 \(m\) 的 Carmichael 函数 \(\lambda(m)\) ,表示 \(\forall \gcd(a, m)=1\to a^{\lambda(m)}\equiv 1\pmod m\)
而根据 Carmichael 定理, \(\lambda(p^k)=\begin{cases} \boldsymbol \varphi(p^k),p>2\vee k<3 \\\\{1\over 2}\boldsymbol \varphi(p^k),p=2\wedge k\geq 3 \end{cases}\)
且根据中国剩余定理,若 \(\displaystyle m=\prod_{i=1}^tp_i^{k_i}\) 则根据 \(a^{\lambda(m)}\equiv 1\pmod m\) 得 \(a^{\lambda(m)}\equiv 1\equiv a^{\lambda(p_i^{k_i})}\pmod {p_i^{k_i}}\)
从而得到 \(\lambda(p_i^{k_i})\mid \lambda(m)\) ,故 \(\displaystyle \lambda(m)=\text{lcm}_{1\leq i\leq t}\lambda(p_i^{k_i})\)
若存在数字 \(\omega\) 使得 \(\text{ord}_m(\omega)=2^k\) 则 \(2^k\mid \lambda(m)\) ,故 \(\exists p_i\wedge 2^k\mid \lambda(p_i^{k_i})\)
即 \((p_i=2\wedge k_i-1-[k_i\geq 3]\geq k)\vee(2^k\mid (p_i-1))\)
题解这一段枚举到 \(\sqrt{m\cdot 2^{-k}}\) 系数,转质数的方法我没理解,但使用 Pollard_Rho 在 \(O(m^{1\over 4})\) 的时间内分解质因数应该是可行的
如果分解后,判定优解,则对于 \(2^k\mid \lambda(p_i^{k_i})\) 的奇质因数 \(p_i\) ,其存在 \(\boldsymbol \varphi(\lambda(p_i^{k_i}))\) 个原根,直接随机化获取原根 \(g\),则可得到 \((g^{\lambda(p_i^{k_i})\cdot 2^{-k}})^{2^k}\equiv 1\equiv \omega^{2^k}\pmod {p_i^{k_i}}\)
故 \(\omega\equiv g^{\lambda(p_i^{k_i})\cdot 2^{-k}}\pmod {{p_i}^{k_i}}\)
若 \(p_i=2\) 且 \(2^k\mid \lambda(p_i^{k_i})\) ,题解说也存在 \(\boldsymbol \varphi(\lambda(p_i^{k_i}))\) 个根 \(r\),使得 \(\text{ord}_{p_i^{k_i}}(r)=\lambda(p_i^{k_i})\) ,也可以随机化得到,然后同上得到 \(\omega\equiv r^{\lambda(p_i^{k_i})\cdot 2^{-k}}\pmod {{p_i}^{k_i}}\)
对于不满足的,直接得到 \(\omega\equiv 1\pmod {p_i^{k_i}}\)
最后,得到若干同余方程。由于模数均是原数的质因数分解,故模数互质,直接 CRT 合并即可
【代码】
有点难码,先咕咕咕了,后期回来填坑