线性不定方程解法
-
扩展欧几里得算法:
考虑求这个不定方程的一个解:
ax+by=c
- 可以证明该不定方程有解的充分必要条件是(a,b) | c。
证明:(a,b) | a且(a,b) | b,因为c=ax+by,故(a,b) | c。 - 于是可以把等式两边同时除上一个(a,b)转化为a,b互质的情况。
- 考虑a,b互质的情况。我们现在要解不定方程:
ax+by=c
先假设我们可以解出:
bx+(a mod b)y=c
那么有:
ax1+by1=c,
bx2+(a-[a/b])y2=c
对应一下a,b的系数可以得到:
x1=y2,
y1=x2-[a/b]y2
因为互质,所以最后一定能递推到a=1,b=0的情况,因为我们就相当在做辗转相除,而(a,b)=1,这时候不断回代就可以得到x1,y1。
附上代码:
void exgcd(int a,int b,int &x,int &y){ if(b) exgcd(b,a%b,y,x),y-=a/b*x; else x=1,y=0; }
-
二元一次不定方程:
形如:
ax+by=c,a≠0,b≠0
的不定方程称为二元一次不定方程。
- 方程有解当且仅当(a,b) | c时。
- 将方程两边除上(a,b)得到a',b'互质的情况,然后用扩展欧几里得算法解出其一个特解,表示为x1,y1。
- 那么原方程组的通解可以表示为x=x1+(b/(a,b))t,y=y1-(a/(a,b))t t∈Z。
证明:由x1,y1可得方程组:
a'x+b'y=c',
a‘x1+b‘y1=c‘
两式相减得:
a'(x-x1)=b'(y1-y)
因为(a',b')=1,所以x-x1=b‘t,y1-y=a‘t,整理可得x=b’t+x1,y=y1-b‘t。
-
n元一次不定方程:
形如:
a1x1+a2x2+ •••• +anxn=c,ai≠0
的方程称为n元一次不定方程。
- 方程有解的充要条件:(a1,a2,•••• ,an)| c。
- 引入新变量t1,t2,••••,tn-2将不定方程拆为:
a1x1+a2x2=d1t1 d1=(a1,a2)
d1t1+a3x3=d2t2 d2=(d1,a3)
••••
dn-3tn-3+an-1xn-1=dn-2tn-2 dn-2=(dn-3,an-1)
dn-2tn-2+anxn=c
这n-1个不定方程,将等号右边的t看作常量,去等号左边的t看作是变量,求解最后一个不定方程然后回代t就好了。
一元线性同余方程(组)解法
-
一元线性同余方程:
形如:
ax Ξ b (mod m)
的方程称为一元同余方程,其等价形式为:
ax-my=b
用解二元一次不定方程的解法即可解。
-
一元线性同余方程组:
形如:
x Ξ b1 (mod m1)
x Ξ b2 (mod m2)
••••
x Ξ bn (mod mn)
的方程组称为一元线性同余方程组。一般有两种解法。
-
合并法(exCRT)
由
x Ξ b1 (mod m1)
x Ξ b2 (mod m2)
可得:
x=b1+m1y1 (*)
x=b2+m2y2
两式相减得到:
m1y1-m2y2=b1-b2
若该不定方程无解,则原同余方程组无解。若有解,设其中一个特解为z1,同余方程组的一个特解为x1。
其通解y1=z1+(m2/(m1,m2))t,带入方程(*)得到:
x=b1+m1z1+(m1m2/(m1,m2))t (**)
又由特解z1带入方程(*)得到:
x1=b1+m1z1
带入方程(**)得到:
x=x1+(m1m2/(m1,m2))t=x1+lcm(m1,m2)t
方程等价于:
x Ξ x1 (mod lcm(m1,m2))
将同余方程不断照这样合并,最后得到的就是原同余方程的解。
-
中国剩余定理(CRT)
当m1,m2,•••• ,mn 两两互质的时候,则对于任意整数b1,b2,•••• ,bn 此同余方程组都有解。且可以通过下面的方法构造解。
设M=Π1≤i≤nmi,并设Mi=M/mi,设Mi-1是Mi在mod mi意义下的逆元。则同余方程组的解为:
x=Σ1≤i≤nbiMi-1Mi
证明:对任意mi,都有x mod mi=Σ1≤i≤nbiMi-1Mi mod mi = bi(根据M的定义,M mod mi为0且除Mi以外其他的Mj中均含有mi,故模mi值也为0,而Mi-1Mi mod mi的值为1)
这说明x是原同余方程的解。设x1与x2均为原同余方程的解,那么有:
x1-x2 Ξ 0 (mod mi)
因为mi均互质,所以M | x1-x2,所以解均相差k个M,故在Σ1≤i≤nbiMi-1Mi后面加上kM构成x=kM+Σ1≤i≤nbiMi-1Mi。
mi不是两两互质可以拆成两两互质。