版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
能不用Math库里的函数就不用,速度太慢了,运行超时!!!
使用辗转相除法和递归求两个正整数m和n的最大公约数。
输入格式:
输入两个正整数m,n。
输出格式:
按要求输出辗转相除过程及最终结果,输出结果之间空格分隔。
输入样例:
21 35
输出样例:
gcd(21,35) gcd(35,21) gcd(21,14) gcd(14,7) 7
代码如下:
import java.util.*;
//能不用Math库里的函数就不用,速度太慢了,运行容易超时!!!
public class 递归求最大公约数 {
static int max,min;
static int max(int x,int y){
if(x>=y){
return x;
}
else{
return y;
}
}
static int min(int x,int y){
if(x<=y){
return x;
}
else{
return y;
}
}
static void fun(int m,int n){
if(m<n){//为了输出第一个gcd(21,35)才加的。。
System.out.print("gcd("+m+","+n+") ");
}
if(n==0){
System.out.println(m);
return;
}
max=max(m, n);
min=min(m, n);
System.out.print("gcd("+max+","+min+") ");
max=max%min;
fun(min,max);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
int m=in.nextInt();
int n=in.nextInt();
fun(m,n);
}
}