move primecheck to utils struct

This commit is contained in:
Mystikfluu 2023-02-26 10:49:51 +01:00
parent dc797b2dda
commit c359ca292a
2 changed files with 25 additions and 12 deletions

View File

@ -1,10 +1,21 @@
pub mod is_prime {
use num_bigint::BigUint;
fn log_2(x: BigUint) -> u64 {
use num_bigint::BigUint;
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct PrimeUtils {
//prime_cache: Vec<BigUint>
}
impl PrimeUtils {
pub fn new() -> Self {
Self { }
}
pub fn log_2(self: &Self, x: BigUint) -> u64 {
x.bits() - 1
}
pub fn is_prime(number: &BigUint) -> bool {
pub fn is_prime(self: &Self, number: &BigUint) -> bool {
if BigUint::from(1u8) == *number {
return false;
}
@ -20,7 +31,7 @@ pub mod is_prime {
// number = 2^a - 1
// a = log2(number + 1)
let a = log_2(number+1u8);
let a = self.log_2(number+1u8);
if BigUint::from(2u8).pow(a as u32)-BigUint::from(1u8) != *number {
let mut i = BigUint::from(1u8);
let one = BigUint::from(1u8);

View File

@ -2,7 +2,7 @@ pub mod is_prime;
use std::{time::SystemTime,thread};
use num_bigint::BigUint;
use crate::is_prime::is_prime::is_prime;
use crate::is_prime::PrimeUtils;
fn p(n: f64) -> f64 {
let ln_n = n.ln();
@ -38,7 +38,9 @@ fn main() {
let sys_time = SystemTime::now();
let n:f64 = 1_000_000f64;
let utils = PrimeUtils::new();
let n:f64 = 1_000f64;
let nthprime_approx = p(n*1.01) as u128;
const THREADS: u128 = 12;
let workloads = nthprime_approx/THREADS;
@ -56,7 +58,7 @@ fn main() {
loop {
number = number + &inc;
if is_prime(&number) {
if utils.is_prime(&number) {
lprimes.push(number.clone());
}
if number == max {
@ -85,8 +87,8 @@ fn main() {
break;
}
}
let removed = (primes.len()-n as usize).clamp(0, n as usize);
if primes.len() > n as usize {
let removed = (primes.len()-n as usize).clamp(0, primes.len());
if removed != 0 {
for _ in 0..removed {
primes.pop();
}
@ -98,7 +100,7 @@ fn main() {
let inc = BigUint::from(1u8);
loop {
number = number + &inc;
if is_prime(&number) {
if utils.is_prime(&number) {
primes.push(number.clone());
}
if primes.len() == n as usize {