Mersenne primes are prime numbers of the form 2^{p} – 1. It turns out that if 2^{p} – 1 is a prime, so is *p*; the requirement that *p* is prime is a theorem, not part of the definition.

So far 51 Mersenne primes have discovered [1]. Maybe that’s all there are, but it is conjectured that there are an infinite number Mersenne primes. In fact, it has been conjectured that as *x* increases, the number of primes *p* ≤ *x* such that 2^{p} – 1 is also prime is asymptotically

*e*^{γ} log *x* / log 2

where γ is the Euler-Mascheroni constant. For a heuristic derivation of this conjecture, see Conjecture 3.20 in Not Always Buried Deep.

How does the actual number of Mersenne primes compared to the number predicted by the conjecture? We’ll construct a plot below using Python. Note that the conjecture is asymptotic, and so it could make poor predictions for now and still be true for much larger numbers. But it appears to make fairly good predictions over the range where we have discovered Mersenne primes.

import numpy as np import matplotlib.pyplot as plt # p's for which 2^p - 1 is prime. # See https://oeis.org/A000043 ps = [2, 3, 5, ... , 82589933] # x has 200 points from 10^1 to 10^8 # spaced evenly on a logarithmic scale x = np.logspace(1, 8, 200) # number of p's less than x such that 2^p - 1 is prime actual = [np.searchsorted(ps, t) for t in x] exp_gamma = np.exp(0.5772156649) predicted = [exp_gamma*np.log2(t) for t in x] plt.plot(x, actual) plt.plot(x, predicted, "--") plt.xscale("log") plt.xlabel("p") plt.ylabel(r"Mersenne primes $\leq 2^p-1$") plt.legend(["actual", "predicted"])

## Related posts

[1] Fifty one Mersenne primes have been verified. But these may not be the smallest Mersenne primes. It has not yet been verified that there are no Mersenne primes yet to be discovered between the 47th and 51st known ones. The plot in this post assumes the known Mersenne primes are consecutive, and so it is speculative toward the right end.