import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println ("Please Enter Your Integer");
int X = input.nextInt();
int X1 = input.nextInt();
for(int i = 1; i <= X && i <= X1; i++)
{
if(X%i==0 && X1%i==0) {
int GCD = i;
System.out.printf("GCD of %d and %d is: %d", X, X1, GCD);
}
}
}
}
'
这段代码的问题是for函数一直在运行程序,所有的公约数都被打印出来了,我想过滤掉较小的数字,只打印最大的公约数。
我试过反转for函数,但这会搞砸Eucladian算法
2条答案
按热度按时间unhi4e5o1#
你可以调用一个helper函数:
这将返回GCD并且具有更好的时间复杂度。
nszi6y052#
将
GCD
变量声明移到for循环之前,将print语句移到for循环之后,应该可以工作。因为GCD是在循环结束时除x
和x1
的最大数。