作为家庭作业,我应该采用分而治之的方法对大整数进行取幂。我知道Karatsuba的乘法算法,我可以应用什么分而治之的算法来得到x ^ y的结果,两者都是大整数?
答案 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”,它们就会出现。)
答案 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);
}