1. 程式人生 > >exgcd 解同餘方程ax=b(%n)

exgcd 解同餘方程ax=b(%n)

ax=n(%b)  ->   ax+by=n

方程有解當且僅當 gcd(a,b) | n ( n是gcd(a,b)的倍數 )

exgcd解得 a*x0+b*y0=gcd(a,b)

記k=n/gcd(a,b)

則方程ax+ny=b的所有解為

x=k*x0 +  [ b/gcd(a,b) ]*t

y=k*y0 -  [ a/gcd(a,b) ]*t

 

a*x0+b*y0=gcd(a,b)  

->  (a*x0+b*y0)*n/gcd(a,b) = gcd(a,b)*n/gcd(a,b)

->  x=k*x0,y=k*y0是方程ax+by=n的基本解

->ax+by  + lcm(a,b)*t-lcm(a,b)*t = n   (lcm(a,b)=a*b/gcd(a,b))

->a*[ x+[ b/gcd(a,b) ]*t  ] + b*[ y- [ a/gcd(a,b) ]*t  ] =n

n/gcd(a,n)t

 

x=kx0+n/gcd(a,n)ty=ky0a/gcd(a,n)t(t=0,1,2)