我们发现在(p(p-1))范围内,每个数关于(p)和(varphi(p))的余数对((a,b))各不相同。
设原根为(g)。
那么也就是说,在(n,m)不等于0的情况下:
由于余数对各不相同。
那么其实是在求:
的解的个数。
如果(n,m)等于0,等于0的部分的解就是((p-1)^2)
现在设:
(N(m))为(m)中满足条件的四个数组的个数。
那么设:
由于:
设(p_i^{e_i})中某一个解和(p_j^{e_j})中的某一个解分别为:
所以得到:
这样子我们通过两个互质的数得到:
所以说:
我们现在要求:(N(p^e))
我们设:
满足的数对((a,b))个数为:(C(t))
那么:
现在考虑如何求(C(t))
假设我们现在已经确定了(a),要求满足条件的(b)的个数。
但是这样我们发现(gcd(a,p^e)|t)这个条件不一定成立,也就是说满足条件的个数可能为(0),这样不方便我们批量计算,仍然首先假设(ab!=0),0的情况之后特判掉。
所以这里提出(a)中含有的(p)的因子。
条件被转化为:
这样我们需要解的就是在满足一定的(alpha,eta)的情况下的((a',b'))数量。
先假设(a')已经确定了。
那么:
转化为线性方程:
首先引理:
设a'b'的到的一组特解为:$$egin{cases}b_0k_0end{cases}$$
设(d=gcd(a',e^{e-j}))
那么通解可以表示为:
其中(r)取遍整数集合。
证明一下:
我们设方程(a'(b'+g_b)+p^{e-j}(k-g_k)=s)成立。
那么:
从而可以完整的验证上述引理。
有了这个就好说了。
这个方程中:
那么(b'=b_0+rp^{e-j})
也就是说,每(p^{e-j})出现一个解。
而取值区间为:
那么对于同一个(a'),(b')的数量为:(frac{p^{eta}}{p^{e-eta-alpha}}=p^{alpha})。
而我们的(a')没有(p)的因子,那么他的数目为:(frac{p^{e-alpha}(p-1)}{p}=p^{e-alpha-1}(p-1))
所以对于某一组((alpha,eta)),(a‘,b’)的数目为:
而有(j+1)组((alpha,eta))
所以:对于某一个(t=p^js):
现在特判0:
(1.a!=0)
那么:(ab+kp^e=0)
设(a=p^{alpha}g)
那么(d=gcd(a,p^e)=p^{alpha})
(b=b_0frac{0}{d}+rfrac{p^{e}}{d}=rfrac{p^e}{d})
而:(bin[0,p^e))
所以说解的个数为:(frac{p^e}{frac{p^e}{d}}=d=p^{alpha})
而满足(gcd(a,p^e)=p^{alpha})的(a)的个数为:(frac{p^e}{p^{alpha}}frac{p-1}{p})
对于(C(0))的贡献就是:$$p^{alpha}frac{p^e}{p^{alpha}}frac{p-1}{p}=p^{e-1}(p-1)$$
而(alphain[0,e-1])
那么这部分的贡献就是:(ep^{e-1}(p-1))
(2.a==0)
这部分的贡献就是(b)的个数,为(p^e)
那么:
(C(0)=ep^{e-1}(p-1)+p^e=ep^{e-1}(p-1)+p^{e-1}((p-1)+1)=ep^{e-1}(p-1)+p^{e-1}(p-1)+p^{e-1}=(e+1)p^{e-1}(p-1)+p^{e-1})
所以,考虑到(j)相同的贡献都相同:
这个式子直接迭代可以在(log)复杂度内解决。
那么可以求出(N(m))
(ans=(p-1)^2+N(varphi(p)))
而对于(varphi(p))的分解可以先筛出(sqrt{p})以内的质数。
设(p)内的质数个数为(pi(p))
那么复杂度为:
问题得到解决。