求大数的最大公约数的最高效方法

来源:互联网 发布:js加密 编辑:程序博客网 时间:2024/04/29 16:51

求大数x,y的最大公约数,用(x,y)表示x,y的最大公约数。

若x,y都为偶数,则(x,y)=2*(x>>1,y>>1);//>>1表示右移一位

若x为偶数,y为奇数,则(x,y)=(x>>1,y);

若y为偶数,x为奇数,则(x,y)=(x,y>>1);

若x,y都为奇数,则(x,y) = (y,x-y)。//x>y时

时间复杂度为O(log2(max(x,y)))。

int64 gcd(_int64 x,_int64 y){if(x < y)return gcd(y,x);if(y == 0)return x;else{if(x&1 == 0){if(y&1 == 0)return(gcd(x >> 1,y >> 1) << 1);elsereturn gcd(x >> 1,y);}else{if(y&1 == 0)return gcd(x,y >> 1);elsereturn gcd(y,x-y);}}}

原创粉丝点击