【发布时间】:2017-01-28 09:44:47
【问题描述】:
我需要为一些非常大的 k 和 j 计算 0^j, 1^j, ..., k^j (两者都在几百万的数量级)。我正在使用 GMP 来处理大整数(是的,我需要整数,因为我需要全精度)。现在,我想知道,一旦我完成了计算 n^j 的努力,是否有办法加快 (n + 1)^j 的计算,而不是从头开始?
这是我目前用来计算功率的算法:
mpz_class pow(unsigned long int b, unsigned long int e)
{
mpz_class res = 1;
mpz_class m = b;
while(e)
{
if(e & 1)
{
res *= m;
}
e >>= 1;
m *= m;
}
return res;
}
如你所见,每次我从头开始,都需要很多时间。
【问题讨论】:
-
你应该从
5^2 = 4^2 + 3^2>> Fibonacci开始应用动态规划,以尽量减少计算 -
我想你把我弄丢了...?你能详细说明一下吗?
-
@Null 你的意思是像 7^2 = 6^2 + 5^2?
-
我建议你在math.stackexchange.com 上发布这个问题。如您所见,程序员没有太多的数学意识:)
-
@Null
5^2 * 4^2 + 3^2因为(3, 4, 5)是毕达哥拉斯三元组..