• 「考试」天空碎片


    我们发现在(p(p-1))范围内,每个数关于(p)(varphi(p))的余数对((a,b))各不相同。
    设原根为(g)

    [nequiv g^{a}(mod p) ]

    [mequiv g^{b}(mod p) ]

    [nequiv c(mod varphi(p)) ]

    [mequiv d(mod varphi(p)) ]

    那么也就是说,在(n,m)不等于0的情况下:

    [adequiv bc(mod varphi(p)) ]

    由于余数对各不相同。
    那么其实是在求:

    [abequiv cd(mod varphi(p)),a,b,c,din[0,varphi(p)) ]

    的解的个数。
    如果(n,m)等于0,等于0的部分的解就是((p-1)^2)
    现在设:
    (N(m))(m)中满足条件的四个数组的个数。
    那么设:

    [m=*\_p^e ]

    由于:
    (p_i^{e_i})中某一个解和(p_j^{e_j})中的某一个解分别为:

    [a_ib_iequiv c_id_i(mod p_i^{e_i}) ]

    [a_jb_jequiv c_jd_j(mod p_j^{e_j}) ]

    所以得到:

    [a_ia_jb_ib_jequiv c_ic_jd_id_j(mod p_i^{e_i}p_j^{e_j}) ]

    这样子我们通过两个互质的数得到:

    [N(p_i^{e_i}p_j^{e_j})=N(p_i^{e_i})N(p_j^{e_j}) ]

    所以说:

    [N(m)=prodlimits_{i=1}^{w}N(p_i^{e_i}) ]

    我们现在要求:(N(p^e))
    我们设:

    [abequiv t(mod p^e),a,bin[0,p^e) ]

    满足的数对((a,b))个数为:(C(t))
    那么:

    [N(p^e)=sumlimits_{i=0}^{p^e-1}C^2(i) ]

    现在考虑如何求(C(t))
    假设我们现在已经确定了(a),要求满足条件的(b)的个数。
    但是这样我们发现(gcd(a,p^e)|t)这个条件不一定成立,也就是说满足条件的个数可能为(0),这样不方便我们批量计算,仍然首先假设(ab!=0),0的情况之后特判掉。
    所以这里提出(a)中含有的(p)的因子。
    条件被转化为:

    [t=p^js,a=p^{alpha}a',b=p^{eta}b',a'b'equiv s(mod p^{e-j}) ]

    这样我们需要解的就是在满足一定的(alpha,eta)的情况下的((a',b'))数量。
    先假设(a')已经确定了。
    那么:

    [a'b'equiv s(mod p^{e-j}) ]

    转化为线性方程:

    [a'b'+kp^{e-j}=s,bin[0,p^{e-eta}) ]

    首先引理:
    设a'b'的到的一组特解为:$$egin{cases}b_0k_0end{cases}$$
    (d=gcd(a',e^{e-j}))
    那么通解可以表示为:

    [egin{cases}b=b_0frac{s}{d}+rfrac{p^{e-j}}{d}\k=k_0frac{s}{d}-rfrac{a'}{d}end{cases} ]

    其中(r)取遍整数集合。
    证明一下:
    我们设方程(a'(b'+g_b)+p^{e-j}(k-g_k)=s)成立。
    那么:

    [a'b'+a'g_b+p^{e-j}k-p^{e-j}g_k=s ]

    [a'g_b=p^{e-j}g_k ]

    [{a'}_ddg_b={p^{e-j}}_ddg_k ]

    [frac{p^{e-j}}{d}|g_b,frac{a'}{d}|g_k ]

    从而可以完整的验证上述引理。
    有了这个就好说了。
    这个方程中:

    [gcd(a',p^e)=1 ]

    那么(b'=b_0+rp^{e-j})
    也就是说,每(p^{e-j})出现一个解。
    而取值区间为:

    [[0,p^{eta}) ]

    那么对于同一个(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’)的数目为:

    [p^{e-alpha-1}(p-1)p^{alpha}=p^{e-1}(p-1) ]

    而有(j+1)((alpha,eta))
    所以:对于某一个(t=p^js)

    [C(t)=(j+1)p^{e-1}(p-1) ]

    现在特判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)相同的贡献都相同:

    [N(p^e)=C^2(0)+sumlimits_{i=0}^{e-1}p^{e-j-1}(p-1)C^2(j) ]

    这个式子直接迭代可以在(log)复杂度内解决。
    那么可以求出(N(m))

    (ans=(p-1)^2+N(varphi(p)))
    而对于(varphi(p))的分解可以先筛出(sqrt{p})以内的质数。
    (p)内的质数个数为(pi(p))
    那么复杂度为:

    [O(sqrt{p}+T(pi(sqrt{p}))) ]

    问题得到解决。

  • 相关阅读:
    ubuntu上安装boost库
    boost array使用
    2017新年总结
    qt 设置等待事件
    vs下 qt源码调试
    使用记事本创建Web服务(WebService)
    司以类聚,人以群分
    附件上传
    DES 加密解密
    工作总结-js插件
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12057913.html
Copyright © 2020-2023  润新知