package demo;
import java.util.Scanner;
public class Demo2_7{
public static int gongyueshu(int x,int y)
{
int count=0;
if(x>y)
{
x=(x%y);
if(x==0)
{
return y;
}
}
else
{
y=(y%x);
if(y==0)
{
return x;
}
}
while(x%y!=0 && y%x!=0)
{
if(count==666)//当运行次数过多即判断为无有效的最大公约数
{
System.out.println("这两个数为素数");
return 1;
}
gongyueshu(x,y);//进行递归运算来实现辗转相除法求最大公约数
count++;
}
if(x>y)
return x;
else
return y;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请依次输入要进行求取最大公约数的两个数");
System.out.println("现在请输入要第一个数");
int a = in.nextInt();
System.out.println("现在请输入要第二个数");
int b = in.nextInt();
System.out.println(a+"和"+b+"的最大公约数为:"+gongyueshu(a,b));
}
}
我写的代码只能算简单的最大公约数,但是复杂一些就不行了,debug发现gongyueshu这个方法运行之后不会跳出来,我已经懵了,所以求各位大哥帮帮我(也许是我不会用debug功能........都是英文)
这就是个算法问题啊,简单说就是个数学问题啊。求最大公约数,辗转相除法
public static int gongyueshu(int x,int y){
if(x<y) {
int k=x;
x=y;
y=k;
}
return x%y == 0?y:gongyueshu(y,x%y);
}
还有连续整数检测 公因数(更相减损)
剩下两种自己百度看下。
这个你在网站里搜一下有很多种方法来求