算法导论数论求解模线性方程

  1. ax=b(modn)

    设<a>是模n加法群中的循环子群,即<a>={}={axmodn},所以有一个解当且仅当b属于<a>,而|<a>|必定是n的约数

  2. 对任意正整数a,n,若d=gcd(a,n),在

    <a>=<d>={0,d,2d,3d…(n/d-1)d}所以|<a>|=n/d;

    证明:(1)<d>属于<a>

                ax+ny=d,ax=d(modn),d的倍数属于a

             (2)<a>属于<d>

            设m属于<a>

                ax=m(modn),ax+ny=m,d|ax+ny,d|m,m属于<d>

  3. ax=b(modn)有解,当且仅当gcd(a,n)|b
  4. ax=b(modn)或者无解,或者对模n有d=gcd(a,b)个不同的解

    证明有d个不同的解:

            若在<a>中有一个解,则,由于|<a>|=n/d,所以重复d次

  5. 设d=gcd(a,n),d=ax`+ny`,若d|b,则方程ax=b(modn)的一个解x0满足

    x0=x`(b/d)(modn)

    证明:ax0=ax`(b/d)(modn)

         ax0=d(b/d)(modn)

  6. 方程ax=b(modn)有解(即d|b,其中d=gcd(a,n))x0是方程任意一个解,方程有d个不同的解,分别为xi=x0+i(n/d)        (i=1,2,…,d-1)

    证明:

            axi(modn)=a(x0+i(n/d))(modn)

                     =ax0(modn)=b(modn)

  7. MODULAR-LINEAR-EQUATION-SOLVER(a,b,n)

    {

            (d,x`,y`)=EXTEND-EUCLID(a,n)

            if(d|b)

            {

                x0=x`(b/d)(modn)

                for(i=0 to i-1)

                print x0+i(n/d)(modn)

    }

    else

        print "no solution"

    }

    时间复杂度 lg(b)

  8. n>1,gcd(a,n)=1,则ax=b(modn)有唯一解
  9. n>1,gcd(a,n)=1,则ax=1(modn)有唯一解,否则方程无解
原文地址:https://www.cnblogs.com/inpeace7/p/2397674.html