From 22fe0953ca650bc62332939131df8fcb785305af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ortega=20Froysa?= Date: Thu, 4 Dec 2025 11:24:40 +0100 Subject: [PATCH] Use imported primes. --- src/candidate.rs | 22 ++++++++++++++++++++++ src/main.rs | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/candidate.rs b/src/candidate.rs index 11176f1..098f7ba 100644 --- a/src/candidate.rs +++ b/src/candidate.rs @@ -18,6 +18,7 @@ pub struct CandidateGenerator { base:u64, + // first use of the base first_use:bool, } @@ -29,6 +30,27 @@ impl CandidateGenerator { } } + pub fn calc_base(&mut self, last_prime:u64) { + if last_prime == 2 { + self.base = 0; + self.first_use = false; + } else if last_prime == 3 { + self.base = 6; + self.first_use = true; + } else { + let modulo = last_prime % 6; + if modulo == 1 { + self.base = last_prime + 5; + self.first_use = true; + } else if modulo == 5 { + self.base = last_prime + 1; + self.first_use = false; + } else { + panic!("Invalid last prime {}" , last_prime); + } + } + } + pub fn next(&mut self) -> u64 { /* * All primes, except 2 and 3, will be equal to (n * 6 ± 1). This avoids diff --git a/src/main.rs b/src/main.rs index 6125684..3b904e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -79,6 +79,9 @@ fn main() { println!("{}", res); } else { let mut cand_gen = CandidateGenerator::new(); + if !primes_list.borrow().is_empty() { + cand_gen.calc_base(*primes_list.borrow().back().unwrap()); + } loop { let cand = cand_gen.next();