求取和征服取幂的方法?

时间:2011-05-13 23:11:05

标签: algorithm divide-and-conquer

作为家庭作业,我应该采用分而治之的方法对大整数进行取幂。我知道Karatsuba的乘法算法,我可以应用什么分而治之的算法来得到x ^ y的结果,两者都是大整数?

3 个答案:

答案 0 :(得分:7)

有两种算法在名称square and multiply下组合在一起。你可以从中获得灵感。

答案 1 :(得分:4)

考虑x ^ 256。而不是做x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * X * x * x * x * x * x * x * x,可以做(((x ^ 2)^ 2)^ 2)。

通常,将指数写为二进制并应用指数和指数规则。然后,当你计算x的连续幂时,如果它们出现在指数中,则将它们乘以累加器(如果指数中该数字中有“1”,它们就会出现。)

请参阅http://en.wikipedia.org/wiki/Exponentiation_by_squaring

答案 2 :(得分:0)

这是一个很好的递归算法。

int pow(int a,int b)
{
    if(b == 0) return 1;
    else if(b % 2 == 0) return pow(a,b/2) * pow(a,b/2);
    else return a * pow(a,b-1);
}