#include "stdafx.h"
//辗转相除法的改良版,因为取摸开销大,所以改用减法,然后利用是否都是偶数的性质,做优化
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)*2;
else
return gcd(a>>1,b);
}
else
{
if(b&1==0)
return gcd(a,b>>1);
else
return gcd(b,a-b);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int x=22;
int y=121;
printf("gcd of %d and %d is %d\n", x,y,gcd(x,y));
return 0;
}
浙公网安备 33010602011771号