設 \(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)\)