Reaching and surpassing the 64-bit threshold for deterministic prime collection inside arbitrary windows was one of the central objectives of the GC-60 project. That objective was already achieved with microprime_suffix. GC60-M30x3-suffix is a new architectural setup of the same system: the same magnitude 10²⁶ is now reached in 53 minutes, and a window at 10²⁷ in just over 3 hours.
GC60-M30x3-suffix is built on the fundamental principle of GC-60: known divisors do not actively scan — they passively project their footprint onto a fixed binary structure.
The key word in the name is x3: the binary is not one, but three. Sieve_0, Sieve_10, and Sieve_20 cover disjoint residue classes derived from modulo 30, meaning each core works on a separate territory — no overlap, no candidate checked twice. This is not simply parallelism: it is a geometric partition of the candidate space that eliminates redundancy at the root.
The program operates in three phases:
All primes up to the square root of the target base are found. Each prime is immediately evaluated: if at least one of its multiples falls in the macro-window (the union of all requested windows), it enters the useful divisors archive. No prime is skipped — all are traversed, only some are retained.
Cycles are distributed across 16 threads via OpenMP. Each thread works on an independent block, builds its own bitmask, and executes the same check against the macro-window. This is the dominant phase — total time scales almost exclusively here, with the square root of the base.
With the complete archive, each window is processed independently. M30 candidates are marked by the collected divisors — the survivors are the primes. Each window produces a finestra_N.txt file. Time: milliseconds.
All benchmarks measured empirically on real hardware. Mobile laptop processor — reported times are conservative relative to desktop or server hardware.
The first two rows show the same magnitude 10²⁴ with different configurations: one window in 203 seconds, four windows in 219 seconds. The overhead is minimal — about 16 extra seconds to produce four times the primes. This demonstrates that window count barely affects total time: the dominant cost is the sieve over M30 cycles, which depends exclusively on the square root of the base.
| Base | Root max | M30 cycles | Divisors | Windows | Primes | Time |
|---|---|---|---|---|---|---|
| 10²⁴ | 10¹² + 1 | 127,158 | 6,574 | 1 | 179 | 203 s |
| 10²⁴ (multistep) | 10¹² + 1 | 127,158 | 22,712 | 4 | 729 | 219 s |
| 10²⁵ | 3.162×10¹² | 402,106 | 101,665 | 2 | 3,470 | 797 s |
| 10²⁶ | 10¹³ + 1 | 1,271,567 | 105,384 | 2 | 3,260 | 3,169 s (~53 min) |
| 10²⁷ | 3.162×10¹³ | 4,021,045 | 109,340 | 2 | 3,199 | 12,944 s (~3.6 h) |
This is the actual program output for a window at 10²⁴. The first notable figure is Divisori raccolti: 6,574 against Cicli M30: 127,158. This is not a contradiction of determinism — the program traverses all 127,158 cycles without exception (that is where the 203 seconds are). Only 6,574 divisors have at least one multiple falling inside the window; the rest are traversed and consciously discarded. The passive screening phase takes 0.002 seconds. All 179 primes form a perfect verified sequence.
Both programs do identical deterministic work — the divisors collected and primes found are practically the same. The difference lies entirely in architectural efficiency.
No external libraries required — a C++ compiler with OpenMP support is sufficient.
Linux
Windows (Code::Blocks) — add the compiler flag:
Run syntax:
Example — two windows at 10²⁶, width 100,000, step 100,000:
BASE accepts 10^N,
10^N+offset,
or arbitrary integers up to the theoretical limit of 10³⁸ (__int128).