This repository has been archived on 2024-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
coding-corner/2017-03-28/jo-so_euler87.rs

63 lines
1.3 KiB
Rust
Raw Normal View History

2017-03-30 20:33:16 +02:00
/*
Copyright © 2017 Jörg Sommer <joerg@alea.gnuu.de>
License: MIT https://opensource.org/licenses/MIT
*/
//////
//
// Solution of Euler 87 https://projecteuler.net/problem=87
//
fn gen_prime_numbers(limit: u32) -> Vec<u32> {
let mut ret = vec![2, 3];
let mut num = *ret.last().unwrap();
'num: while num + 2 <= limit {
num += 2;
for i in 3..((num as f32).sqrt() as u32 + 1) {
if num % i == 0 {
continue 'num;
}
}
ret.push(num);
}
ret
}
fn main() {
const LIMIT: u32 = 50_000_000;
// println!("pn {:?}", gen_prime_numbers(500));
let pn = gen_prime_numbers((LIMIT as f32).sqrt() as u32);
println!("There are {} numbers below sqrt(50.000.000)", pn.len());
let mut nums = Vec::new();
for pn2 in pn.iter() {
let pow2 = pn2.pow(2);
for pn3 in pn.iter() {
let sum = pow2 + pn3.pow(3);
if sum >= LIMIT {
break;
}
for pn4 in pn.iter() {
let sum2 = sum + pn4.pow(4);
if sum2 >= LIMIT {
break;
}
nums.push(sum2);
}
}
}
nums.sort();
nums.dedup();
println!("Answer {}", nums.len());
}