MMRF v1.0
中文

Research

Seven aggregates over 148,933 primes.

Everything on this page was computed from the shipped shards, on the environment named at the bottom, by a script whose hash is printed here. Nothing is quoted from a paper.

dataseta5caea22a57efaac915c…
workflow36f765220749b287cde6…
output5b93e5f26256e16f6290…
environmentPython 3.14.5 · NumPy 2.5.1

Density

148,933 primes below 2,000,000 gives a density of 0.074467. Density falls as the range grows, which is the shape the prime number theorem predicts; the magnitude bands below show the fall directly.

RangePrimesDensity
0–1040.40000
10–100210.23333
100–1,0001430.15889
1,000–10,0001,0610.11789
10,000–100,0008,3630.09292
100,000–1,000,00068,9060.07656
1,000,000–2,000,00070,4350.07043

The counts in that table sum to the dataset total, and each row is the difference between two consecutive values of π(10ᵏ). They are stored, not re-derived: the band boundaries come from the decimal_digits column that ships inside the shards.

Gaps

Across 148,932 consecutive-prime gaps the mean is 13.429 and the largest is 132. That maximum is the known maximal gap below two million, which is one of the cheapest ways to check this dataset against the literature.

median gap
10
90th percentile
28
99th percentile
52
maximum
132
distinct gap values
61
Most frequent gaps
gap 214,871
gap 414,741
gap 624,531
gap 810,280
gap 1012,967
gap 1215,141
gap 147,941
gap 189,559

Gap 6 is the most common by a wide margin — the jumping champion for this range. Gap 2 occurs exactly as often as there are twin pairs, which is a consistency check the two independent columns have to pass.

Residues

Every prime above 5 is coprime to 30, so it must land in one of eight residue classes. It lands in them almost equally:

Primes by residue class mod 30
n ≡ 118,540
n ≡ 718,625
n ≡ 1118,648
n ≡ 1318,654
n ≡ 1718,642
n ≡ 1918,593
n ≡ 2318,601
n ≡ 2918,627

The eight counts span only 114. The dataset also stores residues mod 6 and mod 210, and a derived wheel30 class — the column that generation 2 was proposed and reviewed in order to add.

Families

Four pair families are encoded as bit flags, each set on the larger member of the pair so that appending a later range never rewrites an earlier shard.

Prime family counts
twin prime14,871
cousin prime14,742
sexy prime29,419
safe prime7,746

Cousin pairs exceed gap-4 occurrences by exactly one. The extra pair is (3, 7): 7 − 4 = 3 is prime, but 5 sits between them, so it is a cousin pair that is not a gap of 4. It is the only such case in the range.

Replay

One command, no network, no index required:

shell
python workflows/stable_baseline.py --project-root . \
    --output results_v10/stable_baseline_output.json

The script verifies the stable manifest against its own hash before reading anything, refuses to run if the shard or prime count disagrees with the manifest, and fails loudly if the family-flag column carries a bit it cannot name. Its output is canonicalised and self-hashed the same way the manifest is, so the value below is reproducible byte for byte.

workflow
stable_baseline.py
workflow sha256
36f765220749b287cde604bbff48b2c1b31e1c212855afeac3c10498bfd22569
dataset manifest
a5caea22a57efaac915c00dd92c655b1126e0b6d9b2b93790e48bc167733e0d1
output sha256
5b93e5f26256e16f6290cea957df45aaf78de672ca0e80bf17ef2419b4d50ac3
environment
Python 3.14.5, NumPy 2.5.1, Windows

Known limits

  • The range is fixed at two million. Every figure here is a statement about that range and nothing beyond it.
  • Pair families are counted at the larger member, so a pair straddling the upper bound is not counted.
  • The shipped prime-distribution-baseline workflow runs through the data-lake query layer and cannot be replayed from the released package, because the lake index is not part of it. That gap is documented on the workflows page; this study exists to close it.
  • No result here is conditioned on an externally supplied integer, and no combination of them narrows a factor search.