扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)。
通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a 与 b, 必存在有整数 x 与 y 使得ax + by = gcd(a,b)。有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。
然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。(以上解释来自百度)
其原理就是应用反复带余除法来进行实现
直接先上代码
import java.util.Scanner;
public class oujilide{
public static void main(String[] args){
int a,b,c,d,s=0,t=0;
/*其中a是被除数
b是除数
c是商
d是余数*/
d=1;
int s1=1,s2=0,t1=0,t2=1;
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
b=sc.nextInt();
int aa=a;
int bb=b;
while(d!=0) {
c=a/b;
d=a%b;
s=s1-c*s2;
t=t1-c*t2;
if(d!=0) {
a=b;
b=d;
s1=s2;
s2=s;
t1=t2;
t2=t;
}
}
System.out.println("两个整数的最大公因数为"+b);
System.out.println("输出sa*tb=d的形式如下:");
System.out.println("("+s2+")"+" * "+aa+" + "+bb+" * "+"("+t2+")" +" = "+b);
}
}
本篇代码的流程图如下图
展示几个输出结果样例