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);
}