最大公约数问题

来源:互联网 发布:人工智能发展的看法 编辑:程序博客网 时间:2024/06/01 09:19
/** * 最大公约数 * @author Administrator * */public class FindGCD {/** * 解法一、辗转相除法即:f(x,y)=f(y,y%x) */public int gcd1(int x,int y){return (y<=0)?x:gcd1(y, x%y);}/** * 解法二、更相减损法 即:f(x,y)=f(y,x-y) */public int gcd2(int x,int y){if(y>x)return gcd2(y,x);if(y<=0)return x;elsereturn gcd2(x,x-y);}/** * 解法三、如果x、y均为偶数f(x,y)=2*f(x,y)=2*f(x>>1,y>>1) *         如果x为奇数y为偶数f(x,y)=f(x,y/2)=f(x,y>>1) *         如果x为偶数y为奇数f(x,y)=f(x/2,y)=f(x>>1,y) *         如果x、y都为奇数f(x,y)=f(y,x-y)相减之后必有一数为偶数重复以上步骤 */public int gcd3(int x,int y){if(x<y)return gcd3(y,x);if(y==0)return x;else{if(x%2==0){if(y%2==0)return gcd3(x>>1,y>>1);elsereturn gcd3(x>>1,y);}else{if(y%2==0)return gcd3(x,y>>1);elsereturn gcd3(y,x-y);}}}}

0 0
原创粉丝点击