s = 1/2 + it and let t grow: the point loops around the plane and every so often passes straight through the origin, one zero per pass. Those zeros know where the primes are: the staircase below counts the prime powers, and adding the zeros one by one folds a smooth guess into it.>}
foot={<>Two engines share the line. Below t = {JOIN} every point is the complex Euler-Maclaurin sum, t plus ten terms closed by seven Bernoulli corrections, good to ten decimals; above it Z(t) comes from the Riemann-Siegel formula, the main sum of floor(sqrt(t / 2pi)) cosines and the first four correction terms, with the kernel derivatives taken by central differences, and zeta = Z e^(-i theta). On this page the two engines never differ by more than {SEAM.toExponential(1)} in Z beyond the join, so the seam is invisible. theta(t) is the argument of Gamma(1/4 + it/2) less t ln(pi) / 2, by Stirling's series after a shift of ten. The zeros are sign changes of Z between Gram points, refined by bisection on the Euler-Maclaurin engine to a billionth, so the six decimals listed are exact; the count below t is the same scan. psi(x) is exact: the sieve adds ln p at every prime power. The blue curve is the von Mangoldt explicit formula x - sum x^rho / rho - ln 2pi - ln(1 - x^-2) / 2 cut off at the chosen zeros, each paired with its mirror; the pink curve keeps none of them. At a jump the full formula lands on the midpoint, and more zeros sharpen every step. The zeros come back to the page as numbers, so both curves are Rust; the page only draws. The same primes are sieved on primes.>}
controls={controls}>
{list}