Add a concise README that documents how the program finds highly composite numbers. The explanation covers the divisor-count formula, why exponent order lets the search skip arbitrary numbers, and how the implementation generates and filters record candidates. Test Plan: - Not run; documentation-only change. Refs: N/A
1.4 KiB
hcn
Find highly composite numbers up to a search limit.
cargo run --release -- 1000000000
If no limit is given, the default is 1_000_000_000.
Algorithm
A number with prime factorization
n = 2^a * 3^b * 5^c * ...
has
(a + 1) * (b + 1) * (c + 1) * ...
divisors.
The exact primes do not affect the divisor count; only the exponents do. For a fixed exponent list, the smallest possible number is made by putting the largest exponent on the smallest prime:
a >= b >= c >= ...
If a larger exponent appears on a larger prime, swapping those two exponents keeps the divisor count unchanged but makes the number smaller.
So a highly composite number cannot have that shape. If it did, the smaller swapped number would already have the same number of divisors, so the original number would not be the first record.
That means record candidates are only numbers like:
2^a * 3^b * 5^c * ... where a >= b >= c >= ...
All other numbers are redundant for finding new records.
The program:
- Recursively generates numbers from the first primes.
- Only tries exponent sequences where each exponent is no larger than the previous one.
- Stops a branch as soon as the number exceeds the search limit.
- Computes the divisor count directly from the exponents.
- Sorts candidates by number and prints each new divisor-count record.
This avoids factoring every number in the range.