09967ad6d7
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
60 lines
1.4 KiB
Markdown
60 lines
1.4 KiB
Markdown
# hcn
|
|
|
|
Find highly composite numbers up to a search limit.
|
|
|
|
```bash
|
|
cargo run --release -- 1000000000
|
|
```
|
|
|
|
If no limit is given, the default is `1_000_000_000`.
|
|
|
|
## Algorithm
|
|
|
|
A number with prime factorization
|
|
|
|
```text
|
|
n = 2^a * 3^b * 5^c * ...
|
|
```
|
|
|
|
has
|
|
|
|
```text
|
|
(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:
|
|
|
|
```text
|
|
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:
|
|
|
|
```text
|
|
2^a * 3^b * 5^c * ... where a >= b >= c >= ...
|
|
```
|
|
|
|
All other numbers are redundant for finding new records.
|
|
|
|
The program:
|
|
|
|
1. Recursively generates numbers from the first primes.
|
|
2. Only tries exponent sequences where each exponent is no larger than the
|
|
previous one.
|
|
3. Stops a branch as soon as the number exceeds the search limit.
|
|
4. Computes the divisor count directly from the exponents.
|
|
5. Sorts candidates by number and prints each new divisor-count record.
|
|
|
|
This avoids factoring every number in the range.
|