Допустим, вы хотите для некоторых n и k найти сумму:
Вот известные формулы для первых нескольких k:
Допустим, вы забыли их. Что делать? К счастью, существует простой алгоритм для генерации этих формул.
Прежде всего докажем теорему.
Теорема
Предположим, что для каждого целого неотрицательного n:
где f и g – многочлены. Тогда для некоторой константы c:
Доказательство
Для каждого целого положительного n верно:
Эти два многочлена равны в бесконечном количестве точек, а значит, они тождествены. Что позволяет нам сказать:
Применение
Допустим, мы хотим найти формулу для суммы квадратов. Тогда, используя нашу теорему, можно построить такой алгоритм:
Теперь проделаем тот же алгоритм для суммы кубов:
I hope the technique has already discussed in the very beginning chapter of Knuth's Concrete Math book.
Hard version: 1677F - Tokitsukaze и драгоценные камни
Straightforward version: 1467 timus
Maybe the easier and more direct way (if you want to do it for all $$$k$$$ up to some limit) would be to notice that
But on the other hand, it's also $$$g_k(n) - g_k(n-1) = n^k$$$, hence we get the recurrence
or, for $$$g_k(n)$$$, it would be
starting with $$$g_0(n) = n$$$.
Thus,
Also I think it would be nice to write down the algorithm from the blog in generic form for arbitrary $$$k$$$:
From this, one gets
where $$$c$$$ is picked in a way that guarantees that $$$g_k(1) = 1$$$, that is
and the free constant $$$c'$$$ that would appear from integration should be $$$c'=0$$$, as $$$g_k(0)=0$$$.
Compared to the scheme I described above, it's probably beneficial for larger $$$k$$$, as it allows to find it in $$$O(k)$$$ per term, rather than $$$O(k^2)$$$. I wonder if there is a more explicit formula for $$$c$$$...