模线性方程

对于模线性方程:ax=b(mod n) 就是 (a*x)%n=b; 就是已知a,n,b,求解x的值。

ax=b(mod n)  \rightarrow a*x-n*y=b;  \rightarrow a*x=b+n*y;   具有以下四个性质:

  1. 如果ax=b (mod n) 有解,那么 gcdd | b (表示gcdd是b 的因子) ,其中gcdd=gcd(a,n);

        可以证明:    gcdd=gcd(a,n) ,就是有  a=gcdd*u;  n=gcdd*v;  那么代入原式就有 

                              gcdd*u*x-gcdd*v*y=b; 即是:gcdd*(u*x-v*y)=b,很显然  gcdd是b的因子。

   2.如果 ax=b(mod n) 有解,那么x就会有gcdd个解,否则就无解

   3.gcdd=gcd(a,n) ,假设对于{x}', {y}'有gcdd= a * {x}'+n * {y}', 如果满足 gcdd | b, 那么 对于 ax =b (mod n) 

      的一个解 x_{0} ,就会满足:   x_{0}= ( b/gcdd) * {x}' (mod n);

      可以证明:  gcdd= a * {x}'+n * {y}'.    a*x_{0} % n = b  因为 gcdd | b  则就有 b = m* gcdd . 

                         a*x_{0}-n*y=m* ( a * {x}'+n * {y}' ).  即是: a*x_{0} -n*(y+ {y}') = a* m*  {x}'.  整理即得:

                          x_{0} = m*  {x}' (mod n)   .  有m= b/gcdd;

  4.假设方程 a*x=b ( mod n)有gcdd个多解,对于随意一个解  x_{0} , 那么对于 模 n 来说 他的d个解为:

       x_{i} = x_{0} - i * ( n / gcdd )  , i= 1,2,3......gcdd-1;

    可以证明:x_{i} * gcdd = x_{0} *gcdd - i * n; 都是gcdd 的倍数然后减去几个n 

利用以上四个性质,再使用扩展欧几里得算法,便可以求解模线性方程的解了

猜你喜欢

转载自blog.csdn.net/dong_qian/article/details/81627856