我已经在
Java中实现了欧几里德算法,以找到两个给定数字的最大公约数(GCD).
在大多数情况下,我的程序运行正常,我已经用一些随机的数字集进行了测试,但是,我发现在一个案例中(我知道)它给出了一个不正确的输出,这是针对以下组合的数字:
Enter integer a: 8965
Enter integer b: 55
该计划的输出应为55,但情况并非如此.给出的结果如下:
gcd = 1
Execution time: 0.005747ms.
我不确定为什么这个特定的数字组合会导致问题,因为它适用于其他数字,例如,这是一组不同数字的结果:
Enter integer a: 15000
Enter integer b: 5325
gcd = 75
Execution time: 0.007389ms.
import java.util.Scanner;
public class EuclideanAlgorithm {
public static void main (String [] args) {
int a, b;
try(Scanner sc = new Scanner(System.in);) {
System.out.print("Enter integer a: ");
a = sc.nextInt();
System.out.print("Enter integer b: ");
b = sc.nextInt();
}
long start = System.nanoTime();
int answer = EuclideanAlgorithm(a, b);
long stop = System.nanoTime();
System.out.println("gcd = " + answer);
System.out.println("Execution time: " + ((stop - start) / 1e+6) + "ms.");
}
public EuclideanAlgorithm() {}; //Suppress default constructor
private static int EuclideanAlgorithm(int a, int b) {
if ( (a == 0) || (b == 0)) {
return 0;
}
if (b > a) {
int temp = a;
a = b;
b = temp;
}
int gcd = 1;
while(gcd != 0) {
if( (a % b) == 0) {
break;
}
gcd = a % b;
a = b;
b = gcd;
}
return gcd;
}
}