求ax≡b(mod n)所有解的算法
利用欧几里德辗转相除法,模方程等价于存在整数y,使得ax-ny=b,时间复杂度为o(n+logb)。
Procedure modular_linear_equation(a,b,n:longint);
Begin
d:=extended_gcd(a,n,x,y); //d最大公约数,(a,n)->d;并求出x,y
if b mod d <> 0 then no_answer; //没有解,定理A
e:=(x*(b / d)) mod n; //?
For i:=0 to d-1 do //d个解,定理B
ans[i+1]:=(e+i*(n / d)) mod n; //?
End;
关于使用扩展欧几里德算法解决不定方程的办法
对于不定整数方程pa+qb=c,若 c mod Gcd(p, q)=0,则该方程存在整数解,否则不存在整数解。
定理(证明请查看相关数论书):
A. 方程 ax = b (mod n) 有解, 当且仅当 gcd(a, n) | b;
B. 方程 ax = b (mod n) 有d个不同的解, 其中 d = gcd(a, n);
谁能解释一下红色的部分~~~~~