Fix prime calculator; more threads by default
This commit is contained in:
+20
-7
@@ -17,7 +17,12 @@ pub mod prime_utils {
|
||||
return true;
|
||||
}
|
||||
|
||||
if number.sqrt().pow(2) == *number {
|
||||
let sqrtnum = number.sqrt();
|
||||
|
||||
if sqrtnum.pow(2) == *number {
|
||||
if number == &BigUint::from(23u8) {
|
||||
eprintln!("SQRT check failed");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -31,21 +36,23 @@ pub mod prime_utils {
|
||||
let one = BigUint::one();
|
||||
let zero = BigUint::zero();
|
||||
|
||||
let sqrtnum = number.sqrt() + &one; //fake ceil function
|
||||
let sqrtnum = sqrtnum + &one; //fake ceil function
|
||||
|
||||
for prime in g_primes {
|
||||
if prime < &sqrtnum && number % prime == zero {
|
||||
if number == &BigUint::from(23u8) {
|
||||
eprintln!("Prime table check failed");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if !is_probably_prime(number, 5) {
|
||||
return false;
|
||||
}
|
||||
|
||||
loop {
|
||||
i += &one;
|
||||
if number % &i == zero {
|
||||
if number == &BigUint::from(23u8) {
|
||||
eprintln!("manual check failed");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if i == sqrtnum {
|
||||
@@ -61,6 +68,12 @@ pub mod prime_utils {
|
||||
last = (last.pow(2) - &two) % number;
|
||||
}
|
||||
|
||||
last == BigUint::from(0u8)
|
||||
let ret = last == BigUint::from(0u8);
|
||||
|
||||
if number == &BigUint::from(23u8) && !ret {
|
||||
eprintln!("RET check failed");
|
||||
}
|
||||
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -65,8 +65,8 @@ fn main() {
|
||||
const N: i64 = 1_000_000;
|
||||
const NF: f64 = N as f64;
|
||||
const NU: usize = N as usize;
|
||||
const THREADS: usize = 12;
|
||||
const SPLITTER: u64 = N as u64 / 10;
|
||||
const THREADS: usize = 30;
|
||||
const SPLITTER: u64 = N as u64 / THREADS as u64;
|
||||
|
||||
try_set_thread_priority();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user