模线性方程

2019-04-13 11:56发布

对于模线性方程:ax=b(mod n) 就是 (a*x)%n=b; 就是已知a,n,b,求解x的值。 ax=b(mod n)  
ightarrow a*x-n*y=b;  
ightarrow 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  利用以上四个性质,再使用扩展欧几里得算法,便可以求解模线性方程的解了