博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最大公约数问题(编程之美2.7)

Posted on 2010-09-23 17:02  KurtWang  阅读(470)  评论(0编辑  收藏  举报
#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;
}