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