Skip to content

Instantly share code, notes, and snippets.

@StanleyMasinde
Created June 17, 2025 13:42
Show Gist options
  • Save StanleyMasinde/3b42fbd4151f12860cc52ee6dac62061 to your computer and use it in GitHub Desktop.
Save StanleyMasinde/3b42fbd4151f12860cc52ee6dac62061 to your computer and use it in GitHub Desktop.
task: concurrently compute and print the first 1000 prime numbers
use std::env::args;
use rayon::prelude::*;
fn is_prime(n: u64, primes: &[u64]) -> bool {
let sqrt = (n as f64).sqrt() as u64;
for &p in primes {
if p > sqrt {
break;
}
if n % p == 0 {
return false;
}
}
true
}
fn main() {
let mut primes: Vec<u64> = vec![2];
let mut candidate = 3;
let args: Vec<String> = args().collect();
let prime_limit: usize = args.get(1).expect("Please enter the limit")
.parse()
.expect("Enter a valid number");
while primes.len() < prime_limit {
let batch: Vec<u64> = (candidate..candidate + 2000)
.into_par_iter()
.filter(|&n| {
if n % 2 == 0 {
return false;
}
is_prime(n, &primes)
})
.collect();
primes.extend(batch);
candidate += 2000;
}
primes.truncate(prime_limit);
for p in primes {
println!("{}", p);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment