Current task: —

Updated 08-19-2026

The Stieltjes Constants and the Laurent Expansion of ζ(s) at s = 1

An In-Depth Analysis for Riemann Hypothesis Research


1. The Equation

$$\zeta(s) = \frac{1}{s-1} + \sum_{n=0}^\infty \frac{(-1)^n\gamma_n}{n!}(s-1)^n$$

with the closed-form definition of the coefficients:

$$\gamma_n = \lim_{m\to\infty}\left[\sum_{k=1}^m \frac{(\log k)^n}{k} - \frac{(\log m)^{n+1}}{n+1}\right]$$

This is the Laurent series expansion of the Riemann zeta function around its unique singularity — the simple pole at s = 1 with residue 1. The constants γₙ are called the Stieltjes constants (sometimes "generalized Euler constants").


2. Historical Background

Thomas Jan Stieltjes (1856–1894)

The constants are named after the Dutch mathematician Thomas Joannes Stieltjes, famous also for the Riemann–Stieltjes integral and the Stieltjes moment problem. The story of these constants unfolds in his correspondence with Charles Hermite (his mentor and friend, with whom he exchanged over 400 letters between 1882 and 1894).

Precursors and successors


3. Mathematical Derivation (Expanded)

Step 1 — Analytic continuation via Abel summation

Starting from the Dirichlet series ζ(s) = Σ n⁻ˢ (valid for Re(s) > 1), Abel/Euler–Maclaurin summation yields:

$$\zeta(s) = \frac{s}{s-1} - s\int_1^\infty \frac{\{x\}}{x^{s+1}}\,dx = \frac{1}{s-1} + 1 - s\int_1^\infty \{x\}x^{-s-1}dx$$

where {x} is the fractional part. The integral converges for Re(s) > 0, proving ζ(s) − 1/(s−1) extends holomorphically past s = 1. In fact, ζ(s) − 1/(s−1) is entire (by full continuation), so the Taylor expansion about s = 1 converges for all s ∈ ℂ — the Laurent series has infinite radius of convergence.

Step 2 — Definition of γₙ

Since g(s) := ζ(s) − 1/(s−1) is entire, write its Taylor series at s = 1:

$$g(s) = \sum_{n=0}^\infty \frac{g^{(n)}(1)}{n!}(s-1)^n, \qquad \gamma_n := (-1)^n\, g^{(n)}(1)$$

The alternating sign (−1)ⁿ/n! is a convention chosen so that γ₀ = γ exactly.

Step 3 — The limit formula via Euler–Maclaurin

Apply Euler–Maclaurin summation to f(x) = (log x)ⁿ/x:

$$\sum_{k=1}^m \frac{(\log k)^n}{k} = \underbrace{\frac{(\log m)^{n+1}}{n+1}}_{\int_1^m f} + \frac{f(1)+f(m)}{2} + \sum_{j} \frac{B_{2j}}{(2j)!}\left[f^{(2j-1)}\right]_1^m + R$$

As m → ∞, f(m) → 0 and the derivative terms converge, so the difference

$$\sum_{k=1}^m \frac{(\log k)^n}{k} - \frac{(\log m)^{n+1}}{n+1}$$

converges to a finite limit — precisely γₙ. The connection to the derivatives of g(s) comes from differentiating the Dirichlet series term-by-term: dⁿ/dsⁿ [k⁻ˢ] = (−log k)ⁿ k⁻ˢ, matched against dⁿ/dsⁿ [1/(s−1)] at s = 1 via the regularizing term (log m)ⁿ⁺¹/(n+1).

Known values

n γₙ
0 +0.57721 56649 01532... (Euler–Mascheroni)
1 −0.07281 58454 83676...
2 −0.00969 03631 28723...
3 +0.00205 38344 20303...
4 +0.00232 53700 65467...
5 +0.00079 33238 17301...

Growth: The γₙ do not stay small. Matsuoka (1985) and later Coffey and Knessl–Coffey (2011) showed they grow roughly like n!·(something), oscillating in sign in a quasi-periodic pattern. Knessl & Coffey gave the striking asymptotic:

$$\gamma_n \sim \frac{B}{\sqrt{n}}\, e^{nA}\cos(a n + b)$$

for explicit constants — e.g., γ₁₀₀ ≈ −4.25 × 10¹⁷.


4. Connection to the Riemann Hypothesis

This is where the equation matters for your paper:

(a) Li's criterion and the Li coefficients

The Li coefficients λₙ (Xian-Jin Li, 1997) satisfy: RH is true ⟺ λₙ ≥ 0 for all n ≥ 1. Bombieri & Lagarias (1999) showed the λₙ can be expressed through the Taylor/Laurent data of ζ at s = 1 — i.e., through the Stieltjes constants and the constants ηₙ from the logarithmic derivative expansion. This is the "Li-coefficient machinery" referenced in your notes (#27–28).

(b) The η-constants

The expansion of the logarithmic derivative,

$$-\frac{\zeta'(s)}{\zeta(s)} = \frac{1}{s-1} - \sum_{n=0}^\infty \eta_n (s-1)^n,$$

has coefficients ηₙ that are polynomial combinations of the γₙ (e.g., η₀ = −γ₀, η₁ = γ₁ + γ₀²·(...)). These appear in explicit formulas for prime counting.

(c) Bounds on Stieltjes constants ↔ zero-free regions

Sharp bounds on |γₙ| (Berndt 1972, Matsuoka 1985, Adell 2011, Blagouchine 2015) control the behavior of ζ near s = 1, which relates to zero-free regions and error terms in the Prime Number Theorem.


5. Key Research Papers (with links)

  1. X.-J. Li, "The positivity of a sequence of numbers and the Riemann hypothesis," J. Number Theory 65 (1997), 325–333. https://doi.org/10.1006/jnth.1997.2137

  2. E. Bombieri & J. C. Lagarias, "Complements to Li's criterion for the Riemann Hypothesis," J. Number Theory 77 (1999), 274–287. https://doi.org/10.1006/jnth.1999.2392

  3. Y. Matsuoka, "Generalized Euler constants associated with the Riemann zeta function," in Number Theory and Combinatorics (World Scientific, 1985), 279–295.

  4. M. W. Coffey, "New results on the Stieltjes constants: Asymptotic and exact evaluation," J. Math. Anal. Appl. 317 (2006), 603–612. https://arxiv.org/abs/math-ph/0506061

  5. C. Knessl & M. W. Coffey, "An effective asymptotic formula for the Stieltjes constants," Math. Comp. 80 (2011), 379–386. https://doi.org/10.1090/S0025-5718-2010-02390-7

  6. I. V. Blagouchine, "A theorem for the closed-form evaluation of the first generalized Stieltjes constant at rational arguments and some related summations," J. Number Theory 148 (2015), 537–592. https://arxiv.org/abs/1401.3724

  7. F. Johansson, "Rigorous high-precision computation of the Hurwitz zeta function and its derivatives," Numer. Algorithms 69 (2015), 253–270. (State-of-the-art computation of γₙ to thousands of digits.) https://arxiv.org/abs/1309.2877

  8. J. B. Keiper, "Power series expansions of Riemann's ξ function," Math. Comp. 58 (1992), 765–773. https://doi.org/10.1090/S0025-5718-1992-1122072-5

  9. R. Kreminski, "Newton-Cotes integration for approximating Stieltjes (generalized Euler) constants," Math. Comp. 72 (2003), 1379–1397. https://doi.org/10.1090/S0025-5718-02-01483-7

(DOI links resolve to the publisher pages; arXiv links are free full-text. Please verify links, as they may change.)


6. Computational Examples in Python

Example 1 — γₙ via the defining limit (naive, with Euler–Maclaurin correction)

import math

def stieltjes_naive(n, m=10**6):
    """
    Approximate gamma_n by the defining limit:
    gamma_n = lim_{m->inf} [ sum_{k=1}^m (log k)^n / k  -  (log m)^{n+1}/(n+1) ]
    Includes the first Euler-Maclaurin correction f(m)/2 for faster convergence.
    """
    s = 0.0
    for k in range(1, m + 1):
        s += math.log(k)**n / k
    tail = math.log(m)**(n + 1) / (n + 1)
    correction = 0.5 * math.log(m)**n / m   # f(m)/2 term
    return s - tail - correction

for n in range(4):
    print(f"gamma_{n} ≈ {stieltjes_naive(n):.12f}")

Expected output (compare with the table above):

gamma_0 ≈ 0.577215664902
gamma_1 ≈ -0.072815845484
gamma_2 ≈ -0.009690363113
gamma_3 ≈ 0.002053834430

Example 2 — High-precision γₙ with mpmath (the professional way)

from mpmath import mp, stieltjes, zeta, mpf

mp.dps = 50  # 50 decimal digits

# mpmath has a built-in for Stieltjes constants
for n in range(6):
    print(f"gamma_{n} = {stieltjes(n)}")

Output:

gamma_0 = 0.57721566490153286060651209008240243104215933593992
gamma_1 = -0.072815845483676724860586375874901319137736338334338
gamma_2 = -0.0096903631928723184845303860352125293590658061013408
gamma_3 = 0.0020538344203033458661600465427533842857158044454106
gamma_4 = 0.0023253700654673000574681701775260680009044694137849
gamma_5 = 0.00079332381730106270175333487744444483073153940458489

Example 3 — Verify the Laurent expansion itself

from mpmath import mp, stieltjes, zeta, mpf, factorial

mp.dps = 30

def zeta_via_laurent(s, terms=20):
    """Reconstruct zeta(s) from the Laurent expansion at s = 1."""
    s = mpf(s)
    total = 1 / (s - 1)
    for n in range(terms):
        total += (-1)**n * stieltjes(n) / factorial(n) * (s - 1)**n
    return total

for s in [1.5, 2.0, 0.5, 3.0]:
    approx = zeta_via_laurent(s)
    exact  = zeta(s)
    print(f"s = {s}:  Laurent = {approx}")
    print(f"          exact   = {exact}")
    print(f"          error   = {abs(approx - exact)}\n")

The agreement to ~25+ digits for s near 1 (and still excellent at s = 2, 3 since the series is entire) numerically confirms the expansion.

Example 4 — Growth and sign oscillation of γₙ (Knessl–Coffey phenomenon)

from mpmath import mp, stieltjes, log, fabs
import matplotlib.pyplot as plt

mp.dps = 30
ns = list(range(1, 81))
vals = [stieltjes(n) for n in ns]

signs = [1 if v > 0 else -1 for v in vals]
logmag = [float(log(fabs(v))) for v in vals]

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(9, 7))
ax1.plot(ns, logmag, 'b.-')
ax1.set_title(r'$\log|\gamma_n|$ — super-exponential growth')
ax1.set_xlabel('n'); ax1.grid(True)

ax2.stem(ns, signs)
ax2.set_title(r'sign($\gamma_n$) — quasi-periodic oscillation (Knessl–Coffey)')
ax2.set_xlabel('n'); ax2.grid(True)
plt.tight_layout()
plt.savefig('stieltjes_growth.png', dpi=150)
plt.show()

Example 5 — Bridge to RH: Li coefficients from ζ near s = 1

from mpmath import mp, li, zeta, diff, mpf, log, pi, gamma as mpgamma

mp.dps = 30

def xi(s):
    """Riemann xi function: xi(s) = (1/2) s (s-1) pi^(-s/2) Gamma(s/2) zeta(s)."""
    s = mpf(s) if not isinstance(s, complex) else s
    return 0.5 * s * (s - 1) * pi**(-s/2) * mpgamma(s/2) * zeta(s)

def li_coefficient(n):
    """
    Li coefficient: lambda_n = (1/(n-1)!) d^n/ds^n [ s^(n-1) log xi(s) ] at s = 1.
    RH  <=>  lambda_n >= 0 for all n >= 1  (Li, 1997).
    """
    f = lambda s: s**(n - 1) * log(xi(s))
    return diff(f, 1, n) / mp.factorial(n - 1)

print("Li's criterion check (all should be positive if RH holds):")
for n in range(1, 8):
    lam = li_coefficient(n)
    print(f"lambda_{n} = {lam}   {'✓ ≥ 0' if lam >= 0 else '✗ RH VIOLATED!'}")

Expected output (λ₁ = 1 + γ/2 − (1/2)log 4π ≈ 0.0230957...):

lambda_1 = 0.0230957089661210338...   ✓ ≥ 0
lambda_2 = 0.0923457352280475360...   ✓ ≥ 0
lambda_3 = 0.2076389205839722826...   ✓ ≥ 0
...

This last example is the direct link to your E-011 script: the λₙ are computable from the Laurent data at s = 1 (the γₙ), and their positivity is equivalent to the Riemann Hypothesis.


7. Summary Points for Your Paper

  1. Origin: Defined by T. J. Stieltjes in an 1885 letter to Charles Hermite; γ₀ is Euler's constant (1734).
  2. Meaning: The γₙ encode the complete local behavior of ζ(s) at its only pole; since ζ(s) − 1/(s−1) is entire, they encode ζ globally.
  3. RH relevance: Via Li's criterion (Li 1997; Bombieri–Lagarias 1999), positivity of the Li coefficients — which are built from this Laurent data — is equivalent to RH.
  4. Modern research fronts: precise asymptotics (Knessl–Coffey 2011), closed forms at rational arguments (Blagouchine 2015), and rigorous arbitrary-precision computation (Johansson 2015).
  5. Computation: trivial to explore in Python via mpmath.stieltjes, and the naive limit formula converges well with a single Euler–Maclaurin correction.