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