扩展欧几里得算法:关于整数a,b,以及g=GCD(a,b);设整数x,y存在a*x+b*y=g。(数论相关定理可证明肯定存在一组解(x,y).)
因为GCD(a,b)=GCD(b,a%b),举例:22*x + 60*y = GCD(60, 22)
应用欧几里得算法计算:
60=2*22+16 16=60-2*22
22=1*16+6 6=22-1*16
16=2*6+4 4=16-2*6
6=1*4+2 2=6-1*4
4=2*2+0 0=4-2*2
从这个过程可知当求出最大公约数的时候可由一开始a和b的倍数得到:最新的余数=a的倍数+b的倍数
最后得到的最后一次非零余数为GCD(a,b).这样就得到GCD(a,b)=a*x+b*y的解。
由a=60,b=22; 16=a-2b, 6=b-(a-2b), 4=(a-2b)-2(b-(a-2b)),2=b-(a-2b)-[(a-2b)-2*(b-(a-2b))]=11b-4a得到一组解(-4,11)。
方程a*x+b*y=g,g=gcd(a,b).两边同除以g得到:,存在一个解,则所有解,其中k可为任意整数。
线性方程定理:设a与b是非零整数,g=gcd(a,b).方程a*x+b*y=g总是有一个整数解,它可由前面叙述的欧几里得算法得到。则方程的每一个解可由得到,其中k可为任意整数。