Guest User

Project Euler #10

a guest
Jan 21st, 2019
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.04 KB | None | 0 0
  1. extern crate num;
  2. use num::BigUint;
  3. use num::traits::Zero;
  4. use std::time::Instant;
  5.  
  6. fn main() {
  7.     let begin = Instant::now();
  8.  
  9.     let primes = find_primes(|p, n| n >= 2000000);
  10.  
  11.     let time = begin.elapsed();
  12.     println!("Time elapsed: {}s", time.as_secs());
  13.  
  14.     let n = primes.len();
  15.     let p_max = primes.last().unwrap();
  16.     println!("Search done. Found {} primes, the highest being {}.", n, p_max);
  17.  
  18.     let mut sum: BigUint = Zero::zero();
  19.  
  20.     for p in &primes {
  21.         sum += BigUint::from(*p);
  22.     }
  23.  
  24.     println!("The sum of the primes is {}.", sum);
  25. }
  26.  
  27. fn find_primes<F>(exit: F) -> Vec<u64>
  28.     where F: Fn(&Vec<u64>, u64) -> bool
  29. {
  30.     let mut primes: Vec<u64> = vec![2];
  31.     let mut n = 3;
  32.  
  33.     while !exit(&primes, n) {
  34.         let mut is_prime = true;
  35.         for p in &primes {
  36.             if n % p == 0 {
  37.                 is_prime = false;
  38.                 break;
  39.             }
  40.             if *p as f64 >= (n as f64).sqrt() {
  41.                 break;
  42.             }
  43.         }
  44.         if is_prime {
  45.             primes.push(n);
  46.  
  47.             if primes.len() % 10000 == 0 {
  48.                 println!("n = {:6}; p_n = {:7}", primes.len(), n);
  49.             }
  50.         }
  51.         n += 2;
  52.     }
  53.     primes
  54. }
Advertisement
Add Comment
Please, Sign In to add comment