Мне нужно вычислить 0^j, 1^j, ..., k^j для некоторых очень больших k и j (оба в порядка нескольких миллионов). Я использую GMP для обработки больших целых чисел (да, мне нужны целые числа, поскольку мне нужна полная точность). Теперь, интересно, как только я попытаюсь вычислить n^j, нет ли способа ускорить вычисление (n + 1)^j вместо того, чтобы начинать с нуля?Самый быстрый способ вычисления (n + 1)^j из (n^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] (http://algorithms.tutorialhorizon.com/introduction-to-dynamic-programming-fibonacci-series/), чтобы максимально свести к минимуму расчет – Null
Я думаю, вы потеряли меня ...?Можете ли вы подробнее рассказать? –
Разве вы не согласны с тем, что 'b^e = (b-1)^e + (b-2)^e'? – Null