您的位置:首页 > 其它

最大公约数和最小公倍数

2014-05-30 16:33 232 查看
1.最大公约数

(1)辗转相除法

int gcd(int a,int b)
{
while(b)
{
int tmp=b;
b=a%b;
a=tmp;
}
return a;
}


(2)辗转相除法的减法版本

int gcd(int a,int b)
{
if(a==0)return b;
while(b)
{
if(a>b)a-=b;
else b-=a;
}
return a;
}


(3)辗转相除法的递归版本

int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}


(4)辗转相除法的减法+递归版本
int gcd(int a,int b)
{
if(a<b)return gcd(b,a);
return b?gcd(a-b,b):a;
}

(5)辗转相除法(编程之美)

int gcd(int a,int b)
{
if(a<b)return gcd(b,a);
if(b==0)return a;
else
{
if((a&1)==0)
{
if((b&1)==0)return (gcd(a>>1,b>>1)<<1);
else return gcd(a>>1,b);
}
else
{
if((b&1)==0)return gcd(a,b>>1);
else return gcd(a-b,b);
}
}
}

2.最小公倍数



int gcd(int a,int b)  
{  
    return b?gcd(b,a%b):a;  
}  
  
int lcm(int a,int b)  
{  
    return a*b/gcd(a,b);  
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: