设 \(m = p_0^{k_0}\)。如果 \(p_0 \mid p\) 那么 \(p^e=km+x\) 的条件只有在 \(e=0\) 的时候对 \(1\) 会产生约束,其余的约束都被包含在了 \(p_0\) 那里,问题是平凡的。
对于 \(p_0 \nmid p\),\(T = \{p^e \bmod m|e \in N\}\)(集合里的数均对 \(m\) 取模,下同)中不会存在 \(p_0\) 的倍数,故两个条件约束的数集无交。判断无解需要知道集合 \(T\) 的大小才行,故考虑计算 \(|T| = \mathrm{order}(p)\)。由于 \(p^{\varphi(m)}=1,\) 故 \(\mathrm{order}(p) \mid \varphi(m)\)。将 \(\varphi(m)\) 用 Pollard-Rho 分解质因数后枚举约数进行检验即可计算出 \(\mathrm{order}(p)\)。
如果 \(\mathrm{order}(p) + \frac{m}{p_0}+n \geq m\) 则显然无解,否则考虑找一组解。
如果存在 \(\bmod\ m\) 意义下的原根,找一个原根 \(g\),设 \(p \equiv g^u \bmod\ m\)。那么 \(T = \{g^0,g^u,g^{2u},\ldots,g^{(\mathrm{order}(p)-1)u}\}\),设 \(v = \gcd(u,\varphi(m)) = \frac{\varphi(m)}{\mathrm{order}(p)}\)。不难证明 \(T = \{g^0,g^v,g^{2v},\ldots,g^{(\mathrm{order}(p)-1)v}\}\)。于是不合法的数在原根幂表示下指数一定是 \(v\) 的倍数。因为 \(\mathrm{order}(p) \leq \frac{m}{2}\) 所以 \(v \geq 2\),求出 \(v\) 后暴力枚举较小的指数选择。
对于不存在原根的情况,\(p_0=2\)。可以这样做:
- 对于 \(m \leq 10^7\) 暴力;
- 对于 \(p = 4x+1\),注意到 \(\forall e \in N, p^e \equiv 1\ \bmod\ 4\),所以可以在模 \(4\) 余 \(3\) 的数中选,因为 \(m > 10^7,n \leq 5 \times 10^5\) 所以总能选出来;
- 对于 \(p = 4x+3\),只在模 \(4\) 余 \(1\) 的数中选,那么可以把 \(p\) 换成 \(p^2\)。注意到在模 \(2^k(k \geq 3)\) 意义下取 \(g'=5\) 时,任意一个模 \(4\) 余 \(1\) 的数都可以表示为 \(g'\) 的若干次幂,证明可以考虑计算 \(\mathrm{order}(g')\),这里不多赘述。利用 \(g'\) 就可以类似有原根的做法做。因为 \(\mathrm{order}(p^2) = \frac{\mathrm{order}(p)}{2}\),而 \(\mathrm{order}(p) + \frac{m}{p_0}+n \geq m\) 时 \(2\mathrm{order}(p) \leq \varphi(m)\),所以也总能选出一组解。
忽略 long long 乘法实现总复杂度 \(O(m^\frac{1}{4} + d(\varphi(m)) + n)\)
来源:oschina
链接:https://my.oschina.net/u/4314216/blog/4336841