问题:求两个正整数的最大公约数。(假设两个正整数很大)
解法一.辗转相除法
Bigint gcd(Bigint x ,Bigint y)
{
return(!y) ? x: gcd(y,x%y);
}
解法二. 移位操作加减法操作
Bigint gdc(Bigint x,Bigint y)
{
if(x<y)
return gcd(y,x);
if(y==0)
return x;
else
{
return gcd(x-y,y);
}
}
解法三.结合大整数除法和移位运算
Bigint gcd(Bigint x,Bigint y)
{
if(x<y)
return gcd(y,x);
if(y==0)
{
return x;
}
else
{
if(IsEven(x))
{
if(IsEven(y))
return (gcd(x>>1,y>>1)<<1);
else
return gcd(x>>1,y);
}
else
{
if(IsEven(y))
return gcd(x,y>>1);
else
return gcd(y,x-y);
}
}
}