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.
a5caea22a57efaac915c…36f765220749b287cde6…5b93e5f26256e16f6290…Python 3.14.5 · NumPy 2.5.1Density
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.
| Range | Primes | Density |
|---|---|---|
| 0–10 | 4 | 0.40000 |
| 10–100 | 21 | 0.23333 |
| 100–1,000 | 143 | 0.15889 |
| 1,000–10,000 | 1,061 | 0.11789 |
| 10,000–100,000 | 8,363 | 0.09292 |
| 100,000–1,000,000 | 68,906 | 0.07656 |
| 1,000,000–2,000,000 | 70,435 | 0.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
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:
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.
Replay
One command, no network, no index required:
python workflows/stable_baseline.py --project-root . \
--output results_v10/stable_baseline_output.jsonThe 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-baselineworkflow 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.