Zhou's Website
🌐

Feature Image

Solve sum of k-th powers problem

Math, Number Theory, Algorithm, Portfolio, Python
Solve sum of k-th powers problem.

result

There is the result of $\sum_{i = 1}^{n} i^{100}$

Introduction

Given $k \in \mathbb{N}$, convert

$$ \sum_{i = 1}^{n} i^k $$

into a polynomial by the following fact

$$ n^k = \sum_{i = 1}^n i^k - \sum_{i = 1}^n (i - 1)^k. $$

Example

Start with $k = 0$,

$$ \sum_{i = 1}^{n} i^0 = \sum_{i = 1}^{n} 1 = n. $$

To find $k = 1$,

$$ \begin{align*} n^2 & = \sum_{i = 1}^{n} i^2 - \sum_{i = 1}^{n} (i - 1)^2 \\ & = \sum_{i = 1}^{n} \left[ i^2 - (i - 1)^2 \right] \\ & = \sum_{i = 1}^{n} (2i - 1) \\ & = 2 \sum_{i = 1}^{n} i - \sum_{i = 1}^{n} 1. \end{align*} $$

Therefore

$$ \begin{align*} \sum_{i = 1}^{n} 1 & = \frac{1}{2} \left( n^2 + \sum_{i = 1}^{n} 1 \right) \\ & = \frac{1}{2} n^2 + \frac{1}{2} n. \end{align*} $$

Then for $k = 2$,

$$ \begin{align*} n^3 & = \sum_{i = 1}^{n} i^3 - \sum_{i = 1}^{n} (i - 1)^3 \\ & = \sum_{i = 1}^{n} \left[ i^3 - (i - 1)^3 \right] \\ & = \sum_{i = 1}^{n} (3i^2 - 3i + 1) \\ & = 3 \sum_{i = 1}^{n} i^2 - 3 \sum_{i = 1}^{n} i + \sum_{i = 1}^{n} 1. \end{align*} $$

Therefore

$$ \begin{align*} \sum_{i = 1}^{n} i^2 & = \frac{1}{3} \left( n^3 + 3 \sum_{i = 1}^{n} i - \sum_{i = 1}^{n} 1 \right) \\ & = \frac{1}{3} \left( n^3 + 3 \left[ \frac{1}{2} n^2 + \frac{1}{2} n \right] - n \right) \\ & = \frac{1}{3} n^3 + \frac{1}{2} n^2 + \frac{1}{6} n. \end{align*} $$

We can use this method to find $\sum_{i = 1}^n i^k$ for any $k \in \mathbb N$.

$$ \begin{align*} n^{k + 1} & = \sum_{i = 1}^{n} i^{k + 1} - \sum_{i = 1}^{n} (i - 1)^{k + 1} \\ & = \sum_{i = 1}^{n} \left[ i^{k + 1} - (i - 1)^{k + 1} \right] \\ & = \sum_{i = 1}^{n} \left[ i^{k + 1} - \sum_{j = 0}^{k + 1} \binom{k + 1}{j} i^{j} (-1)^{k + 1 - j} \right] \\ & = \sum_{i = 1}^{n} \left[ i^{k + 1} - \left( i^{k + 1} - (k + 1) i^{k} + \sum_{j = 0}^{k - 1} \binom{k + 1}{j} i^{j} (-1)^{k + 1 - j} \right) \right] \\ & = \sum_{i = 1}^{n} \left[ (k + 1) i^{k} + \sum_{j = 0}^{k - 1} \binom{k + 1}{j} i^{j} (-1)^{k + 1 - j} \right] \\ & = (k + 1) \sum_{i = 1}^{n} i^k + \sum_{i = 1}^{n} \sum_{j = 0}^{k - 1} \binom{k + 1}{j} i^{j} (-1)^{k + 1 - j} \end{align*} $$

Therefore

$$ \begin{align*} \sum_{i = 1}^{n} i^k & = \frac{1}{k + 1} \left[ n^{k + 1} + \sum_{i = 1}^{n} \sum_{j = 0}^{k - 1} \binom{k + 1}{j} i^{j} (-1)^{k + 1 - j} \right] \\ & = \frac{1}{k + 1} \left[ n^{k + 1} + \sum_{j = 0}^{k - 1} \left[ \binom{k + 1}{j} (-1)^{k + 1 - j} \sum_{i = 1}^{n} i^j \right] \right] \end{align*} $$

Let $\sum_{i = 1}^{n} i^k = S_k$, we have

$$ \begin{align*} S_k = \frac{1}{k + 1} \left[ n^{k + 1} + \sum_{j = 1}^{k} \binom{k + 1}{j} (-1)^{k - j} S_j \right] \end{align*} $$

Algorithm

from fractions import Fraction
from math import comb
import numpy as np

k = int(input())
p = k + 1

A = np.zeros((p, p)) + Fraction()
for i in range(p):
    for j in range(p):
        if i >= j:
            A[i][j] = Fraction(comb(i + 1, j)) if (i + j) % 2 == 0 else Fraction(-comb(i + 1, j))
        else:
            A[i][j] = Fraction(0)

B = np.zeros(p) + Fraction()
B[0] = 1 / A[k][k]
A[k] = A[k] / A[k][k]
for i in range(1, p):
    B[i] = - A[k][k - i] / A[k - i][k - i]
    A[k] = A[k] - (A[k][k - i] / A[k - i][k - i]) * A[k - i]

print(f"\\frac{{1}}{{{p}}} n^{{{p}}}", end = ' ')
for i in range(1, p):
    if B[i].numerator != 0:
        print("+" if B[i].numerator > 0 else "-", end = ' ')
        if abs(B[i].numerator) == 1 and B[i].denominator == 1:
            print(f"n^{{{p - i}}}", end = ' ')
        elif B[i].denominator == 1:
            print(f"{abs(B[i].numerator)} n^{{{p - i}}}", end = ' ')
        else:
            print(f"\\frac{{{abs(B[i].numerator)}}}{{{B[i].denominator}}} n^{{{p - i}}}", end = ' ')