Jörgs Lösung für Euler 87 in Rust
This commit is contained in:
parent
044412298b
commit
b8040027c9
2 changed files with 66 additions and 1 deletions
|
@ -8,6 +8,9 @@ LDFLAGS=-lm
|
|||
|
||||
.PHONY: all
|
||||
|
||||
all: jo-so_euler87
|
||||
all: jo-so_euler87 jo-so_euler87_rust
|
||||
|
||||
jo-so_euler87:
|
||||
|
||||
jo-so_euler87_rust: jo-so_euler87.rs
|
||||
rustc -O -g -o $@ $<
|
||||
|
|
62
2017-03-28/jo-so_euler87.rs
Normal file
62
2017-03-28/jo-so_euler87.rs
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
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());
|
||||
}
|
Reference in a new issue