diff --git a/primes/README.md b/primes/README.md index b5e1d72..7808140 100644 --- a/primes/README.md +++ b/primes/README.md @@ -3,7 +3,10 @@ Find all primes from 0 to 10 000 000. Printing time is not included. +There are probably some issues in the code since this result seems a bit *questionable* + | Language | Time | | ---------| -------| | Java | 1836ms | -| Javascript | 1778.2ms | \ No newline at end of file +| Javascript | 1778.2ms | +| Rust | 1818ms | \ No newline at end of file diff --git a/primes/javascript/primes.js b/primes/javascript/primes.js index ad62f5e..dd52a9e 100644 --- a/primes/javascript/primes.js +++ b/primes/javascript/primes.js @@ -9,6 +9,8 @@ for (let i = 0; i < 10; i++) { times.push(totalTime); } +console.assert(primes(10_000_000).length === 664_579); + const average = times.reduce((a, b) => a + b, 0) / times.length; console.log(`Average time was ${average}ms`) diff --git a/primes/rust/Cargo.toml b/primes/rust/Cargo.toml index c4b8881..82bda0b 100644 --- a/primes/rust/Cargo.toml +++ b/primes/rust/Cargo.toml @@ -6,4 +6,10 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -[dependencies] \ No newline at end of file +[dependencies] + +[profile.dev] +opt-level = 3 + +[profile.release] +opt-level = 3 \ No newline at end of file diff --git a/primes/rust/src/main.rs b/primes/rust/src/main.rs index 6b7ac50..f7bbfc3 100644 --- a/primes/rust/src/main.rs +++ b/primes/rust/src/main.rs @@ -3,14 +3,17 @@ use std::time::{SystemTime}; fn main() { let mut times = Vec::new(); - for i in 0..10 { + for i in 0..2 { println!("Starting run {}", i); let start = SystemTime::now(); let _ = primes(10_000_000); + let time = start.elapsed().unwrap().as_millis(); times.push(time); } + assert_eq!(primes(10_000_000).len(), 664_579); + let average = times.iter().sum::() / times.len() as u128; println!("Took {}ms on average", average); } @@ -21,22 +24,16 @@ fn primes(max: usize) -> Vec { primes_list.push(2); - for i in 3..max { //go through all numbers - let mut is_prime = true; for prime in &primes_list { //test each number if *prime > (i as f64).sqrt() as usize { + primes_list.push(i); break; } if i % prime == 0 { //i = test number, j = some known prime - is_prime = false; break; } } - - if is_prime { - primes_list.push(i); - } } return primes_list;