Description
给定正整数\(A, B, K\),求方程\(x^A\equiv B\pmod{2K+1}\)在\(Z_{2K+1}\)中的解的数量。
多组询问,组数不超过1000。
\(1\leq A,B\leq 10^9, 1\leq K\leq 5\times 10^8\)。
Solution
算是一道综合性很强的题目了……
先将模数分解质因数,对每一种质因子幂单独求解,然后由中国剩余定理之类的知道最后的解数是每一部分的解数的积。
那么考虑每种质因子的幂\(m=p^c\)的解数。先把\(B\)取下模,要是\(B = 0\)的话那么\(x\)是\(p^{\lceil\frac{c}{A}\rceil}\)的倍数就行了,因此答案是\(p^{c-\lceil\frac{c}{A}\rceil}\)。
那么考虑\(B\neq 0\)的情况。你可以对两边取指标(因为\(m\)事奇质数的幂,所以一定有原根,原根当然很好找了),就得到了\(A\mathrm{ind}x\equiv\mathrm{ind}B\pmod{\varphi(m)}\),然后根据线性同余方程那套理论,假设\(d=\gcd(A,\varphi(m))\),如果\(d|\mathrm{ind}B\)才有解,且解的数量为\(d\)。
但是有一个问题就是可能有\(\gcd(B, m)>1\),这样的话\(\mathrm{ind}B\)就不一定存在。那么我们在原始的式子里,把两边疯狂除\(p\)直到右边没有\(p\)了,那么假设\(B=p^su\),那么可知新的方程为\(\frac{x^A}{p^s}\equiv u\pmod{p^{c - s}}\)。可以发现如果\(A\)不是\(s\)的因子的话那么凉了,要是是的话假设\(s = At\),那么新的方程也可以写作\((\frac{x}{p^t})^A\equiv u\pmod{p^{c - s}}\),这样的话就得到了一个新的方程,且\(u\)和现在的模数是互质的,因此可以直接用上面的方法做。需要注意的是我们现在只是求出了模\(p^{c-s}\)的解数,对应到\(p^c\)要乘上\(p^s\)。但是解肯定要乘上一个\(p^t\),因此解数还要在除一下\(p^t\)。
Code
1 |
|