stein法求gcd 学习笔记

原理显然
由于当x,y都为奇数时进行辗转相见
每次减完必有偶数
而偶数最多除log次
那么也最多减log次
复杂度有保证
注:代码未验证

int gcd(int x,int y){
	int res=1;
	while(y){
		if(x%2==0&&y%2==0) res*=2;
		else if(x%2==0) x>>=1;
		else if(y%2==0) y>>=1;
		else{
			if(x>y) swap(x,y);
			y-=x;			
		}
	}
	return x*res;
}
posted @ 2017-02-13 17:50  _zwl  阅读(186)  评论(0编辑  收藏  举报