扩展欧几里得算法(一)
一、应用:
-
不定方程:ax+by=c
- 求逆元
- 同余方程
二、求解线性不定方程
1.对于ax+by=c
设gcd(a,b)=d;if(c%d!=0) 无解;
设c=c1*d,
求出一组解(x0,y0),则ax0+by0=d
则a(c1x0)+b(c1y0)=c,(c1x0,c1y0)为一组解
因此:核心问题是:求ax+by+c=gcd(a,b)的解
2.ax+by=d=b*x1+(a%b)*y1
=b*x1+(a-[a/b]*b)*y1
=b*x1+a*y1-[a/b]*b*y1
=a*y1+b*(x1-[a/b]*y1)
则x=y1,y=x1-[a/b]*y1;
if(b==0&&a==d) x=1,y=0;
3.求ax+by=c的x的最小正整数解
设(x1,y1)(x2,y2)都是原方程的解·
则:ax1+by1=c
ax2+by2=c;
两式相减:a(x1-x2)+b(y1-y2)=0;令gcd(a,b)=d
则:(a/d)*(x1-x2)+(b/d)*(y1-y2)=d;
此时,gcd(a/d,b/d)=1,则
x1-x2=(b/d)*(y2-y1)/(a/d)=k*(b/d)
因此:x=x0+k*(b/d);
最小正整数解:x=(x0%(b/d)+b/d)%(b/d)
- #1126 Frog青蛙的约会 (AC)
- #1067 GREEN友好的地址对amicbl (AC)
- #1709 数学(Math)(RE)
- #3632 约数和 (AC)
- 扩欧