求解线性模方程的一般步骤:ax+ny=b;
1.求d=gcd(a,n),如果b%n!=0,则不存在解
2.用扩展欧几里德求ax+ny=d的一个解x0,则方程ax+ny=b的一个解是x=x0*b/d(该方程共有d个不同的解,分别为xi=x0+i*(n/d),其中i=0,1,2,...,d-1)
注:这里求出一个解其实也可以用求逆元的方法,方程两边同时除以d,得到a'x+n'y=b',这时候x0=b'*(a'模n下的逆元)
3.特别的,最小解是x1=(x0%(n/d)+n/d)%(n/d),最大解是x2=x1+(d-1)*(n/d);
其中用到了几个定理:
定理一:若gcd(a, b) = 1,则方程ax ≡ c (mod b)在[0, b-1]上有唯一解。
证明:由定理一知,总可以找到或正或负的整数k和l使a*k + b*l = gcd(a, b) = 1,即我们可以求出ax ≡ 1 (mod b)的解x0。当然,两边乘以c有a(cx0) ≡ c (mod b),所以有x = cx0就是ax ≡ c (mod b)的解。由于加上或减去若干倍b都是该方程的解,所以x在[0, b-1]上有解。那么怎样确定它的唯一性呢?我花了一个小时终于证明出来了,证明方法就是,假设x1和x2都是[0, b-1]上的解,那么就有ax1 ≡ c (mod b),ax2 ≡