算法1:令两个整数分别为n1, n2。首先找出n1和n2的最小值d,然后依次检验d, d-1,d-2,.....2, 1是否是n1和n2的公约数。第一个满足条件的公约数就是n1和n2的最大公约数。
import java.util.Scanner;
public class Chapter3{
public static void main(String[] args) {
Scanner input = new Scanner(System.in); //创建扫描器对象用于接受控制台输入
System.out.print("Enter two positive integers: "); //输入两个正整数
int integer1 = input.nextInt();
int integer2 = input.nextInt();
int min = Math.min(integer1, integer2); //调用数学函数获取两个整数的最小值
for (int i = min; i >= 1; i--)
if(integer1%i==0 && integer2%i==0) { //如果两个数同时被i整除,则找到了最大公约数
System.out.println("GCD is "+i);
break; //使用break语句结束循环
}
input.close(); //关闭扫描器对象
}
}
算法2:欧几里得算法
package pack2;
import java.util.Scanner;
public class Chapter3 {
public static void main(String[] args) {
try(Scanner input = new Scanner(System.in);) {
System.out.print("Enter two positive integers: ");
int integer1 = input.nextInt();
int integer2 = input.nextInt();
System.out.println("GCD of "+integer1+" and "+integer2+" is "+
gcd(integer1, integer2));
}
}
//欧几里得算法
public static int gcd(int m, int n) {
return (m % n == 0) ? n : gcd(n, m % n);
}
}