/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Test;
/**
*
* @author Administrator
*/
public class LookForGCD {
public static void main(String[] args) {
int x = 42;
int y = 30;
//解法一 辗转相除法 缺点:整数很大时,模运算中用到除法,很复杂
int num = gcd1(x, y);
System.out.println("num=" + num);
//解法二 缺点:当x=1000000000 y =1时,要迭代很多很多次
int num2 = gcd2(x, y);
System.out.println("num2=" + num2);
//解法三
int num3 = gcd3(x, y);
System.out.println("num3=" + num3);
}
private static int gcd1(int x, int y) {
if (x < y) {
return gcd1(y, x);
}
if (y != 0) {
return gcd1(y, x % y);
}
return x;
}
private static int gcd2(int x, int y) {
if (x < y) {
return gcd1(y, x);
}
if (y != 0) {
return gcd2(y, x-y);
}
return x;
}
private static int gcd3(int x, int y) {
if (x < y) {
return gcd3(y, x);
}
if (y == 0) {
return x;
} else {
//判断x是否为偶数
if (isEven(x)) {
if(isEven(y)){
return (gcd3(x>>1,y>>1))<<1;
}else{
return gcd3(x>>1,y);
}
}else{
if(isEven(y)){
return gcd3(x,y>>1);
}else{
return gcd3(y,x-y);
}
}
}
}
private static boolean isEven(int x) {
return x % 2 == 0;
}
}
编程之美2.7最大公约数问题Java版
最新推荐文章于 2022-05-25 14:44:10 发布