5

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

4

3 回答 3

7

有几个算法以square 和 multiply的名称组合在一起。你可以从他们那里得到一些启发。

于 2011-05-13T23:13:56.550 回答
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...)^2 8 次(log2 of 256)。

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

http://en.wikipedia.org/wiki/Exponentiation_by_squaring

于 2011-05-13T23:31:46.867 回答
1

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

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);
}
于 2014-11-10T17:11:51.417 回答