对于模线性方程:ax=b(mod n) 就是 (a*x)%n=b; 就是已知a,n,b,求解x的值。
ax=b(mod n)
a*x-n*y=b;
a*x=b+n*y; 具有以下四个性质:
- 如果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) ,假设对于, 有gcdd= a * +n * , 如果满足 gcdd | b, 那么 对于 ax =b (mod n)
的一个解 ,就会满足: = ( b/gcdd) * (mod n);
可以证明: gcdd= a *
+n *
. a*
% n = b 因为 gcdd | b 则就有 b = m* gcdd .
a*
-n*y=m* ( a *
+n *
). 即是: a*
-n*(y+
) = a* m*
. 整理即得:
= m*
(mod n) . 有m= b/gcdd;
4.
假设方程 a*x=b ( mod n)有gcdd个多解,对于随意一个解 , 那么对于 模 n 来说 他的d个解为:
= - i * ( n / gcdd ) , i= 1,2,3......gcdd-1;
可以证明:
* gcdd =
*gcdd - i * n; 都是gcdd 的倍数然后减去几个n
利用以上四个性质,再使用扩展欧几里得算法,便可以求解模线性方程的解了