Finished projecteuler 087 quite quickly

This commit is contained in:
Philippe Zwietering
2023-03-14 12:50:59 +01:00
parent 3af4295850
commit 5bb1e5b31c
3 changed files with 77 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
use std::collections::HashSet;
use std::time::Instant;
fn primes(max_prime: u32) -> Vec<u32> {
let mut prime_bools = vec![true; max_prime as usize];
prime_bools[0] = false;
prime_bools[1] = false;
for p in 2..=(max_prime as f32).powf(0.5) as usize + 1 {
if !prime_bools[p] {
continue;
}
let mut i = p;
while i + p < max_prime as usize {
i += p;
prime_bools[i] = false;
}
}
prime_bools
.into_iter()
.enumerate()
.filter_map(|(n, b)| match b {
false => None,
true => Some(n as u32),
})
.collect()
}
fn main() {
println!("Hello, this is Patrick!");
let now = Instant::now();
let mut prime_power_triples = HashSet::new();
let max_value = 50000000;
let primes_power_two = primes(f32::powf(max_value as f32, 0.5) as u32 + 1);
let primes_power_three = primes(f32::powf(max_value as f32, 1.0 / 3.0) as u32 + 1);
let primes_power_four = primes(f32::powf(max_value as f32, 0.25) as u32 + 1);
for twos in primes_power_two.iter() {
for threes in primes_power_three.iter() {
for fours in primes_power_four.iter() {
let n = twos * twos + threes * threes * threes + fours * fours * fours * fours;
if n < max_value {
prime_power_triples.insert(n);
}
}
}
}
println!(
"Number of prime power triples under {}: {:?}",
max_value,
prime_power_triples.len()
);
// println!("They are: {:?}", prime_power_triples);
println!("Time passed: {:?}", Instant::now() - now);
}