您的位置:首页 > 其它

最大公约数

2014-03-03 21:26 162 查看
公约数的性质

d|a且d|b,意味着d|(ax+by) 其中x,y为任意整数

最大公约数性质

gcd(an,bn)=n *gcd(a,b)

gcd(a*p,b)=gcd(a,b)// p为质数

合数的性质

任何一个合数可以写成质数幂的唯一形式

欧几里德算法

gcd(a,b)=gcd(b,a%b)

其时间复杂度与fib数有关系,如果b<F(k+1)则递归调用次数少于k次

欧几里德算法的扩展形式

gcd(a,b)=gcd(b,a-b) b>a-b

扩展形式利用了公约数的性质,其问题在于相减的过程中重复的迭代的次数有些多,可以再利用最大公约数的性质进行优化

算法

int gcd(int a,int b)
{
if(a<b)
return gcd(b,a);
if(b==0)
return a;
if(isEven(a))
{
if(isEven(b))
return gcd(a>>1,b>>1)<<1;// a/2,b/2  然后把2提取出来
else
return gcd(a>>1,b);
}
else
{
if(isEven(b))
return gcd(a,b>>1);
else
return gcd(b,a-b);
}

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