Architecture

The x3 principle

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.

Sieve_0
Residues mod 30 — partition A
Sieve_10
Residues mod 30 — partition B
Sieve_20
Residues mod 30 — partition C

The program operates in three phases:

Phase 1

Serial bootstrap sieve

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.

Phase 2

Parallel M30 cycles

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.

Phase 3

Passive screening

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.

Hardware

Test machine

All benchmarks measured empirically on real hardware. Mobile laptop processor — reported times are conservative relative to desktop or server hardware.

CPU
AMD Ryzen 7 4800U
Cores / Threads
8 cores / 16 threads
Base clock
1.80 GHz (boost 4.2)
RAM
32 GB
Benchmarks

Measured execution times

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¹² + 1127,1586,5741179203 s
10²⁴ (multistep)10¹² + 1127,15822,7124729219 s
10²⁵3.162×10¹²402,106101,66523,470797 s
10²⁶10¹³ + 11,271,567105,38423,2603,169 s (~53 min)
10²⁷3.162×10¹³4,021,045109,34023,19912,944 s (~3.6 h)
Program output

Reading the results

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.

================================================
MicroPrime_M30x3 64-bit Ibrido
================================================
Base partenza    : 1.000.000.000.000.000.000.000.000
Ampiezza (W)     : 10000
Finestre         : 1
Radice max       : 1.000.000.000.001
Cicli M30 64-bit : 127158
Thread OMP       : 16
================================================
Fase 2: Avvio setaccio su 127158 cicli...
Divisori raccolti: 6.574 (203.007 s)
======= AVVIO SCREMATURA PASSIVA =======
Generato [finestra_1.txt] -> Primi: 179
Tempo scrematura : 0.0019588 s
================================================
Successo! Tutti i 179 numeri formano una sequenza perfetta di primi
Comparison

vs microprime_suffix at 10²⁶

Both programs do identical deterministic work — the divisors collected and primes found are practically the same. The difference lies entirely in architectural efficiency.

microprime_suffix
Base10²⁶
Windows2
Divisors105,383
Primes found3,260
Time4,547 s (~77 min)
GC60-M30x3-suffix
Base10²⁶
Windows2
Divisors105,384
Primes found3,260
Time3,169 s (~53 min)
~30% faster
Usage

Compilation and usage

No external libraries required — a C++ compiler with OpenMP support is sufficient.

Linux

g++ -O3 main.cpp -o M30_suffix -fopenmp

Windows (Code::Blocks) — add the compiler flag:

-fopenmp

Run syntax:

M30_suffix <BASE> <STEP> <W> <QTA>

Example — two windows at 10²⁶, width 100,000, step 100,000:

M30_suffix 10^26 100000 100000 2

BASE accepts 10^N, 10^N+offset, or arbitrary integers up to the theoretical limit of 10³⁸ (__int128).