Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate num;
- use num::BigUint;
- use num::traits::Zero;
- use std::time::Instant;
- fn main() {
- let begin = Instant::now();
- let primes = find_primes(|p, n| n >= 2000000);
- let time = begin.elapsed();
- println!("Time elapsed: {}s", time.as_secs());
- let n = primes.len();
- let p_max = primes.last().unwrap();
- println!("Search done. Found {} primes, the highest being {}.", n, p_max);
- let mut sum: BigUint = Zero::zero();
- for p in &primes {
- sum += BigUint::from(*p);
- }
- println!("The sum of the primes is {}.", sum);
- }
- fn find_primes<F>(exit: F) -> Vec<u64>
- where F: Fn(&Vec<u64>, u64) -> bool
- {
- let mut primes: Vec<u64> = vec![2];
- let mut n = 3;
- while !exit(&primes, n) {
- let mut is_prime = true;
- for p in &primes {
- if n % p == 0 {
- is_prime = false;
- break;
- }
- if *p as f64 >= (n as f64).sqrt() {
- break;
- }
- }
- if is_prime {
- primes.push(n);
- if primes.len() % 10000 == 0 {
- println!("n = {:6}; p_n = {:7}", primes.len(), n);
- }
- }
- n += 2;
- }
- primes
- }
Advertisement
Add Comment
Please, Sign In to add comment