Current task: —

Updated 08-19-2026

Equations 38–39: The Riesz (1916) and Hardy–Littlewood (1918) Criteria for RH


1. Precise statements

Riesz criterion (Marcel Riesz, 1916). Define the Riesz function

$$ \mathrm{Riesz}(x) \;=\; \sum_{k=1}^{\infty} \frac{(-1)^{k+1}\,x^{k}}{(k-1)!\;\zeta(2k)} . $$

Then

$$ \boxed{\;\text{RH} \iff \mathrm{Riesz}(x) = O\!\left(x^{1/4+\varepsilon}\right) \text{ for every } \varepsilon>0.\;} $$

Hardy–Littlewood criterion (G. H. Hardy & J. E. Littlewood, 1918). Define

$$ F(x) \;=\; \sum_{k=1}^{\infty} \frac{(-x)^{k}}{k!\;\zeta(2k+1)} . $$

Then

$$ \boxed{\;\text{RH} \iff F(x) = O\!\left(x^{-1/4+\varepsilon}\right) \text{ as } x\to\infty.\;} $$

The variant in your notes with $\zeta(2k+2)$ is the same family: summing from $k=0$,

$$ \sum_{k\ge 0}\frac{(-x)^k}{k!\,\zeta(2k+2)} \;=\; \frac{\mathrm{Riesz}(x)}{x}, $$

so its RH-equivalent bound is $O(x^{-3/4+\varepsilon})$. All members of the family differ only in which power $n^{-a}$ weights the Möbius sum below.


2. History

Modern research on these equations:

Paper Contribution Link
L. Báez-Duarte, "A sequential Riesz-like criterion for the Riemann hypothesis" (2003) Discretizes Riesz: RH ⟺ $c_k = \sum_{j=0}^{k}(-1)^j\binom{k}{j}\frac{1}{\zeta(2j+2)} = O(k^{-3/4+\varepsilon})$ https://arxiv.org/abs/math/0307215
M. Wolf, "Evidence in favor of the Baez-Duarte criterion for the Riemann Hypothesis" (2006) Large-scale numerics on $c_k$; detects the tiny oscillation from the first zero https://arxiv.org/abs/math/0605485
J. Cisło & M. Wolf, "Equivalence of Riesz and Báez-Duarte criterion for the Riemann Hypothesis" (2006) Shows the sequential and continuous criteria are the same statement https://arxiv.org/abs/math/0607782
R. B. Paris (several papers, 2000s–2020s) Rigorous asymptotic expansions of the Riesz and Hardy–Littlewood functions via Hadamard/hyperasymptotic methods search "Paris Riesz function" on arXiv (math.CA)

3. The common engine: Möbius smoothing (Ramanujan/Hankel duality)

Insert the Dirichlet series $\dfrac{1}{\zeta(2k)} = \sum_{n\ge1}\dfrac{\mu(n)}{n^{2k}}$ and swap the (absolutely convergent) sums:

$$ \mathrm{Riesz}(x) = \sum_{n\ge1}\mu(n)\sum_{k\ge1}\frac{(-1)^{k+1}}{(k-1)!}\Big(\frac{x}{n^2}\Big)^k = x\sum_{n=1}^{\infty}\frac{\mu(n)}{n^{2}}\,e^{-x/n^{2}}, $$

$$ F(x) = \sum_{n=1}^{\infty}\frac{\mu(n)}{n}\left(e^{-x/n^{2}}-1\right) \;=\; \sum_{n=1}^{\infty}\frac{\mu(n)}{n}\,e^{-x/n^{2}}, $$

where the last equality uses $\sum \mu(n)/n = 0$ (equivalent to the Prime Number Theorem). These are exponentially smoothed Möbius sums at scale $n \sim \sqrt{x}$ — mollified cousins of the Mertens function $M(x)=\sum_{n\le x}\mu(n)$.

Mellin analysis (why the equivalence holds)

Write $\mathrm{Riesz}(x) = -\sum_{k\ge1}\frac{(-x)^k}{k!}\varphi(k)$ with $\varphi(s)=s/\zeta(2s)$. Ramanujan's Master Theorem gives the Mellin transform

$$ \int_0^\infty x^{s-1}\,\mathrm{Riesz}(x)\,dx \;=\; \frac{\Gamma(s+1)}{\zeta(-2s)}, $$

valid in a strip, and by Mellin inversion

$$ \mathrm{Riesz}(x) = \frac{1}{2\pi i}\int_{(c)} \frac{\Gamma(s+1)}{\zeta(-2s)}\,x^{-s}\,ds . $$

Shifting the contour, the poles come from zeros of $\zeta(-2s)$, i.e. $s = -\rho/2$ for each nontrivial zero $\rho$. Each contributes an oscillatory term $\sim c_\rho\, x^{\rho/2}$. Hence:

Why no new leverage: the criterion is exactly the Mertens-type statement $M(x)=O(x^{1/2+\varepsilon})$ wearing an exponential mollifier; the Gaussian-type smoothing $e^{-x/n^2}$ trades sharp cutoffs for entire-function machinery but does not change the underlying zero-detection problem. A bonus fact worth citing: the zero contributions carry a factor $\Gamma(\rho/2)/\zeta'(\rho)$, and $|\Gamma(\tfrac14+i\gamma/2)|$ decays exponentially in $\gamma$ — so the oscillations from the zeros are numerically minuscule. This is why (as Wolf documents) the Riesz function looks deceptively smooth and small, and why numerics on these criteria are simultaneously beautiful and nearly useless for detecting a hypothetical off-line zero.


4. Python: computation and verification

Numerical warning. The power series suffers catastrophic cancellation: the largest term is $\sim e^{x}/\sqrt{x}$ while the sum is $\sim x^{1/4}$, so you must carry roughly $0.44\,x$ extra decimal digits. The Möbius representation avoids this entirely — this contrast is itself a nice point for your paper.

from mpmath import mp

# ----------------------------------------------------------------------
# Mobius function by linear sieve
# ----------------------------------------------------------------------
def mobius_sieve(N):
    mu = [0] * (N + 1)
    mu[1] = 1
    primes, is_comp = [], bytearray(N + 1)
    for i in range(2, N + 1):
        if not is_comp[i]:
            primes.append(i)
            mu[i] = -1
        for p in primes:
            ip = i * p
            if ip > N:
                break
            is_comp[ip] = 1
            if i % p == 0:
                mu[ip] = 0
                break
            mu[ip] = -mu[i]
    return mu

# ----------------------------------------------------------------------
# Method 1: Riesz(x) directly from the power series (needs huge precision)
# ----------------------------------------------------------------------
def riesz_series(x, target_dps=20):
    x = mp.mpf(x)
    old = mp.dps
    mp.dps = int(0.45 * float(x)) + target_dps + 25   # absorb cancellation
    s, k = mp.mpf(0), 1
    while True:
        t = (-1) ** (k + 1) * x**k / (mp.factorial(k - 1) * mp.zeta(2 * k))
        s += t
        if k > 2 * float(x) + 10 and abs(t) < mp.mpf(10) ** (-mp.dps + 5):
            break
        k += 1
    mp.dps = old
    return +s

# ----------------------------------------------------------------------
# Method 2: smoothed Mobius sum  Riesz(x) = x * sum mu(n)/n^2 * exp(-x/n^2)
# with a first-order tail correction using  sum mu(n)/n^2 = 1/zeta(2)
# ----------------------------------------------------------------------
def riesz_mobius(x, N=200_000, mu=None):
    x = mp.mpf(x)
    if mu is None:
        mu = mobius_sieve(N)
    s = mp.mpf(0)
    for n in range(1, N + 1):
        if mu[n]:
            s += mp.mpf(mu[n]) / n**2 * mp.e ** (-x / mp.mpf(n) ** 2)
    # tail: for n > N, exp(-x/n^2) ~ 1, so tail ~ 1/zeta(2) - partial sum
    partial = sum(mp.mpf(mu[n]) / n**2 for n in range(1, N + 1) if mu[n])
    s += (1 / mp.zeta(2) - partial)
    return x * s

# ----------------------------------------------------------------------
# Hardy-Littlewood function  F(x) = sum mu(n)/n * exp(-x/n^2)
# ----------------------------------------------------------------------
def hl_mobius(x, N=200_000, mu=None):
    x = mp.mpf(x)
    if mu is None:
        mu = mobius_sieve(N)
    return sum(mp.mpf(mu[n]) / n * mp.e ** (-x / mp.mpf(n) ** 2)
               for n in range(1, N + 1) if mu[n])

# ----------------------------------------------------------------------
# Baez-Duarte sequential Riesz criterion:
#   c_k = sum_{j=0}^k (-1)^j C(k,j)/zeta(2j+2);   RH <=> c_k = O(k^{-3/4+eps})
# ----------------------------------------------------------------------
def baez_duarte(kmax):
    old = mp.dps
    mp.dps = int(0.31 * kmax) + 30                    # binomial cancellation
    zinv = [1 / mp.zeta(2 * j + 2) for j in range(kmax + 1)]
    cs = []
    for k in range(kmax + 1):
        c = mp.fsum((-1) ** j * mp.binomial(k, j) * zinv[j]
                    for j in range(k + 1))
        cs.append(+c)
    mp.dps = old
    return cs

# ======================================================================
if __name__ == "__main__":
    mp.dps = 30
    mu = mobius_sieve(200_000)

    # --- cross-validate the two representations -----------------------
    for x in [1, 5, 20, 50]:
        a, b = riesz_series(x), riesz_mobius(x, mu=mu)
        print(f"x={x:>3}  series={mp.nstr(a,12):>18}  "
              f"mobius={mp.nstr(b,12):>18}  diff={mp.nstr(abs(a-b),3)}")

    # --- RH growth test:  Riesz(x)/x^{1/4} should stay bounded --------
    print("\n   x        Riesz(x)/x^(1/4)      x^(1/4)*F_HL(x)")
    for e in range(1, 8):
        x = mp.mpf(10) ** e
        r = riesz_mobius(x, mu=mu) / x ** mp.mpf(0.25)
        h = hl_mobius(x, mu=mu) * x ** mp.mpf(0.25)
        print(f"10^{e}   {mp.nstr(r, 10):>16}   {mp.nstr(h, 10):>16}")

    # --- Baez-Duarte:  k^{3/4} * c_k should stay bounded under RH -----
    print("\n   k        k^(3/4) * c_k")
    cs = baez_duarte(500)
    for k in [10, 50, 100, 250, 500]:
        print(f"{k:>5}   {mp.nstr(mp.mpf(k)**mp.mpf(0.75) * cs[k], 10)}")

What you will observe (and can report in your paper):

  1. riesz_series and riesz_mobius agree to many digits — validating the sum-swap identity.
  2. $\mathrm{Riesz}(x)/x^{1/4}$ and $x^{1/4}F(x)$ remain small and slowly varying over many decades — numerically consistent with RH, exactly as Wolf found. The oscillations contributed by the zeros $\rho = \tfrac12 + i\gamma$ have amplitude damped by $|\Gamma(\tfrac14 + i\gamma/2)| \approx e^{-\pi\gamma/4}$: for the first zero $\gamma_1 \approx 14.13$ this is already $\sim 10^{-5}$, which is why these criteria are hopeless as a numerical test of RH even though they are formally equivalent to it.
  3. $k^{3/4} c_k$ (Báez-Duarte) settles toward a bounded, gently oscillating quantity — the oscillation is periodic in $\log k$ with frequency $\gamma_1/2$, a fingerprint of the first zeta zero.

5. Suggested framing for your paper

Present #38–39 as the exponential-means avatar of the Mertens criterion: same zero-detection content, different mollifier. Their value in a survey is (a) historical — among the first entire-function reformulations of RH; (b) pedagogical — the cleanest possible exercise in Ramanujan's Master Theorem + contour shifting; (c) cautionary — a concrete demonstration that "equivalent to RH" and "useful for attacking RH" are very different properties, since the $\Gamma$-damping renders the zero contributions numerically invisible. Cite Riesz (1916), Hardy–Littlewood (1918), Titchmarsh §14.32, Báez-Duarte (2003), and Wolf (2006) as the core bibliography for this pair.