E005: Odd Perfect Numbers — Constraint Filter Pipeline¶
Tags: number-theory, counterexample-search, visualization, search
See: Valid Tags.
Highlights¶
Apply necessary constraints as staged filters on odd candidates.
Plot survival curves (remaining candidates per constraint stage).
Make the “open problem” constraints tangible at finite scales.
Goal¶
Demonstrate why brute-force search for odd perfect numbers is unrealistic by applying known necessary conditions as a step-by-step filter pipeline and visualizing how the candidate pool collapses.
Research question¶
Given odd integers up to a bound \(N\):
how many survive each constraint stage?
which constraints are most “eliminating” in practice at small scales?
what does a survival curve suggest about scalability?
Why this qualifies as a mathematical experiment¶
Odd perfect numbers are an open problem. Theorems provide constraints rather than a classification. Computation makes these constraints tangible by measuring their elimination power on finite candidate sets.
Experiment design¶
Candidate set¶
Start with odd integers \(1 < n \le N\).
Constraint stages (v1)¶
Use a conservative, well-known set of necessary conditions that can be checked mechanically:
Euler form (shape constraint): any odd perfect number must be of the form
where \(q\) is prime, \(\gcd(q,m)=1\), and\[ n = q^{\alpha} m^2 \]\[ q \equiv \alpha \equiv 1 \pmod 4. \]Congruence filter (Touchard-type): odd perfect numbers satisfy strong congruence restrictions (implemented as one or two simple congruence checks supported by the references).
Small-prime structure filters: apply a few lightweight necessary conditions (e.g., reject candidates divisible by some specific small patterns if justified by the reference set).
For each stage, record “remaining candidates”.
Output¶
table: stage name, remaining count, elimination percentage
plot: survival curve (stage index vs. remaining candidates)
How to run¶
make run EXP=e005
or:
uv run python -m mathxlab.experiments.e005
Notes / pitfalls¶
Be explicit about what is proved vs. what is a heuristic. Only implement conditions that are truly necessary.
At small \(N\), some deep constraints won’t show their full strength; the goal is the pipeline idea, not a record bound.
Euler-form testing requires factorization; keep \(N\) small enough for trial division (v1).
Extensions¶
Add stronger bounds/constraints from the modern literature and compare elimination power.
Replace trial division with an SPF sieve to scale the Euler-form test.
Report not just counts but also the distribution of remaining prime-factor patterns.
Published run snapshot¶
If this experiment is included in the docs gallery, include the published snapshot (report + params).
Reproduce:
make run EXP=e005
Parameters¶
N:
300000
Survival table¶
Stage |
Remaining |
|---|---|
odd integers |
149999 |
Touchard congruence |
33333 |
Euler form (\(q^a*m^2\)) |
9774 |
Notes¶
These are necessary conditions only; surviving candidates are not perfect by implication.
Euler-form testing requires factorization; SPF makes it feasible for moderate N.
params.json (snapshot)
{
"n_max": 300000,
"stride_plot": 1
}
References¶
See References.