求最大公约数最终算法

来源:互联网 发布:养成游戏app软件 编辑:程序博客网 时间:2024/05/08 06:56
http://blog.csdn.net/dy_0708/article/details/52831355
/** * Created by 50794 on 2016/10/17. */public class Test {    static int num = 0;    //计算两个数的最大公约数    public static int gcd(int a,int b){        System.out.println("第"+(++num)+"次进入。");        if(a == b){//如果两个数相等,那最大公约数就是它们本身            return  b;        }        if(a > b){//保证a始终大于b            //判断奇偶            if( (b&1)==0 && (a&1)==0){//如果两个数都是偶数,                return  gcd(a>>1,b>>1)<<1;//等于 gcd(a/2,b/2)*2;的写法。            }else if( (a&1)==1 && (b&1)==0){//如果a是奇数,b是偶数                return gcd(a,b>>1);            }else if( (a&1)==0 && (b&1)==1){//如果a是偶数,b是奇数                return gcd(a>>1,b);            }else{//如果a和b都是奇数                return gcd(b,a-b);            }        }else{            return gcd(b,a);        }    }    public static void  main(String []a){        System.out.println(gcd(10000,10001        ));    }}

这是上面代码运行的结果,可以看到1w的数也只需进行37次计算(仅供参考)


 
0 0
原创粉丝点击