• 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明


    本文转自synapse7

    一、威尔逊定理

    若p为质数,则

    p|(p-1)!+1

    亦:(p-1)! ≡ p-1 ≡ -1(mod p)


    例题:

    HDU 2973 YAPTCHA (威尔逊定理及其逆定理)

    解题报告见http://blog.csdn.net/synapse7/article/details/18728157


    二、费马小定理

    假如p是质数,且gcd(a,p)=1,那么

    a^(p-1) ≡1(mod p)

    我们可以利用费马小定理来简化幂模运算:由于a^(p-1)≡a^0≡1(mod p),所以a^x(mod p)有循环节,长度为p-1,所以a^x≡a^(x%(p-1))(mod p)


    例题:

    HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)

    HDU 4196 Remoteland


    三、欧拉定理

    若a,m为正整数,且gcd(a,m) = 1,则

    a^φ(m)≡1(mod m)

    我们亦可以利用欧拉定理来简化幂模运算:a^x≡a^(x%φ(m))(mod m)

    例题:

    HDU 1395 2^x mod n = 1 (欧拉定理 分解素因数)

    HDU 3221 Brute-force Algorithm (矩阵 欧拉定理降幂)


    为下一节做铺垫,我们将a^x≡a^(x%φ(m))(mod m)变下形:

    由于a^φ(m)≡1(mod m)

    a^x≡a^(x%φ(m))≡a^(x%φ(m)+φ(m))(mod m)


    四、求幂大法(广义欧拉定理)及其证明

    对于同余式a^b≡x(mod m),如何求出x?(1<=a,m<=1000000000,1<=b<=10^1000000)

    注意到b很大,我们可以先采取一些方法降幂。

    若gcd(a,m)=1,那么使用欧拉定理即可:a^b≡a^(b%φ(m))(mod m)

    若gcd(a,m)>1,且b>φ(m),则有“求幂大法”——a^b≡a^(b%φ(m)+φ(m))(mod m)

    (当b<=φ(m)时直接用快速幂即可)


    例题:

    FZU 1759 Super A^B mod C

    HDU 2837 Calculation


    大致证明:

    1. 在a的0次,1次,...,b次幂模m的序列中,前r个数(a^0到a^(r-1))互不相同,从第r个数开始,每s个数就循环一次。

    证明:由鸽巢定理易证。

    我们把r称为a幂次模m的循环起始点,s称为循环长度。(注意:r可以为0

    用公式表述为:a^r≡a^(r+s)(mod m)


    2. a为素数的情况

    令m=(p^r)m′,则gcd(p,m')=1,所以p^φ(m')≡1(mod m')

    又由于gcd(p^r,m′)=1,所以φ(m‘)|φ(m),所以p^φ(m)≡1(mod m'),

    即p^φ(m)=km'+1,两边同时乘以p^r,得p^(r+φ(m))=km+p^r(因为m=(p^r)m′)

    所以p^r≡p^(r+s)(mod m),这里s=φ(m)

    3. 推论:p^b≡p^[r+(b-r)%φ(m)](mod m)

    4. 又由于m=(p^r)m′,所以φ(m)≥φ(p^r)=[p^(r-1)](p-1)≥r

    所以p^r≡p^[r+φ(m)]≡p^[r%φ(m)+φ(m)](mod m)

    所以p^b≡p^[r+(b-r)%φ(m)]≡p^[r%φ(m)+φ(m)+(b-r)%φ(m)]≡p^[φ(m)+b%φ(m)](mod m)

    p^b≡p^(b%φ(m)+φ(m))(mod m)


    5. a为素数的幂的情况

    是否依然有a^r’≡a^(r‘+s’)(mod m)?(其中s‘=φ(m),a=p^k)

    答案是肯定的,由2知p^s≡1(mod m′),所以p^(s*(k/gcd(s,k))≡1(mod m′),所以当s’=s/gcd(s,k)时才能有p^(s'k)≡1(mod m′),此时s‘|s|φ(m),且r’=ceil(r/k)<=r<=φ(m)

    由r',s'与φ(m)的关系,依然可以得到a^b≡a^(b%φ(m)+φ(m))(mod m)


    6. a为合数的情况

    只证a拆成两个素数的幂的情况,大于两个的用数学归纳法可证。

    设a=a1a2,ai=pi^ki,ai的循环长度为si

    s|lcm(s1,s2),由于s1|φ(m),s2|φ(m),那么lcm(s1,s2)|φ(m),所以s|φ(m)

    r=max{ceil(ri/ki)}<=max{ri}<=φ(m)

    由r,s与φ(m)的关系,依然可以得到a^b≡a^(b%φ(m)+φ(m))(mod m)

    证毕。


    附:三大定理的证明(定理的引用参考《初等数论及其应用》)

    一、威尔逊定理

    (PS:在利用定理4.10时,仅需用到a^-1的存在性;证明中的“只有”二字要用定理4.11中的“唯一性”)



    二、费马小定理

    重申一遍,gcd(a,p)=1


    三、欧拉定理

    证明前,我们先定义一个概念:


  • 相关阅读:
    【转】WPF的知识
    【转】WPF绑定模式
    【转】关于easyui的窗口和tab页面不执行js说明
    【转】 jquery easyui Tab 引入页面的问题
    【转】.NET+AE开发中常见几种非托管对象的释放
    【转】C# Graphics类详解
    【转】句柄概念
    storm从入门到放弃(一),storm介绍
    Spark的误解-不仅spark是内存计算,hadoop也是内存计算
    TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔
  • 原文地址:https://www.cnblogs.com/ibilllee/p/7704927.html
Copyright © 2020-2023  润新知