Use imported primes.

This commit is contained in:
2025-12-04 11:24:40 +01:00
parent e17ebf47c3
commit 22fe0953ca
2 changed files with 25 additions and 0 deletions

View File

@@ -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

View File

@@ -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();