您的位置:首页 > 其它

求最大公约数

2016-12-11 20:42 183 查看
问题:求两个正整数的最大公约数。(假设两个正整数很大)

解法一.辗转相除法

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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  求最大公约数