1.辗转相除法
#include <iostream>
using namespace std;
int gcd(int x,int y)
{
return (!y)?x:gcd(y,x%y);
}
int main()
{
int n1=42,n2=30;
cout<<gcd(n1,n2);
return 0;
}
#include <iostream>
using namespace std;
int gcd(int x,int y)
{
if(x<y)
return gcd(y,x);
return (!y)?x:gcd(y,x%y);
}
int main()
{
int n1=42,n2=30;
cout<<gcd(n1,n2);
return 0;
}
3.对上述两种算法的结合
#include <iostream>
using namespace std;
int gcd(int x,int y)
{
if(x<y)
return gcd(y,x);
if(y==0)
return x;
else
{
if(x%2==0) //偶数
{
if(y%2==0)
{
return (gcd(x>>1,y>>1)<<1);
}
else
{
return gcd(x>>1,y);
}
}
else
{
if(y%2==0)
{
return gcd(x,y>>1);
}
else
{
return gcd(y,x-y);
}
}
}
}
int main()
{
int n1=42,n2=30;
cout<<gcd(n1,n2);
return 0;
}