E016: Trial division vs. Miller–Rabin scaling

Preview figure for E016

Tags: number-theory, quantitative-exploration, visualization See: Valid Tags.

Highlights

  • This is a thin wrapper that follows the standard experiment template and delegates the actual computation to :mod:mathxlab.experiments.prime_suite.

  • Writes reproducible artifacts (params.json, report.md, and figures).

  • Designed to surface patterns and “looks-true-until-it-breaks” behavior.

Goal

This is a thin wrapper that follows the standard experiment template and delegates the actual computation to :mod:mathxlab.experiments.prime_suite.

Background (quick refresher)

Research question

Which prime-related claim, heuristic, or algorithm breaks first under a clean, controlled computational sweep, and what does the smallest or clearest counterexample (or deviation) look like?

Why this qualifies as a mathematical experiment

  • Finite procedure: run a bounded search / sweep with recorded parameters.

  • Observable(s): counts, gaps, residues, runtime scaling, or first counterexample witnesses.

  • Parameter space: vary bounds (and sometimes algorithmic choices).

  • Outcome: plots/tables + “witness objects” for failures.

  • Reproducibility: outputs saved to out/e016/ with a parameter snapshot.

Experiment design

  • Computation: bounded enumeration / sampling with explicit limits.

  • Outputs: figures and a short report.md summarizing what was found.

  • Artifacts written:

  • figures/fig_*.png

  • params.json

  • report.md

How to run

make run EXP=e016

or:

uv run python -m mathxlab.experiments.e016

Notes / pitfalls

  • “No counterexample found” only means “none found within the configured bounds”.

  • For probabilistic tests (when used), treat outcomes as evidence, not proof.

Extensions

  • Increase bounds and rerun (recording runtime and memory).

  • Compare alternative heuristics or algorithms on the same parameter grid.

  • Turn found deviations into new, tighter conjectures.

Published run snapshot

If this experiment is included in the docs gallery, include the published snapshot (report + params).

Reproduce:

make run EXP=e016

Parameters

  • bit_sizes: [20, 24, 28, 32, 36]

  • samples_per_size: 200

Notes

  • Trial division is fine for small n, but runtime grows quickly with sqrt(n).

  • Miller–Rabin stays fast and is the practical default for big integers.

params.json (snapshot)
{
  "bit_sizes": [
    20,
    24,
    28,
    32,
    36
  ],
  "samples_per_size": 200
}

References

See References.