From 5bb1e5b31c8544c8fd93e811f20339c97094096c Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Tue, 14 Mar 2023 12:50:59 +0100 Subject: [PATCH] Finished projecteuler 087 quite quickly --- projecteuler/087/Cargo.lock | 7 ++++ projecteuler/087/Cargo.toml | 8 +++++ projecteuler/087/src/main.rs | 62 ++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 projecteuler/087/Cargo.lock create mode 100644 projecteuler/087/Cargo.toml create mode 100644 projecteuler/087/src/main.rs diff --git a/projecteuler/087/Cargo.lock b/projecteuler/087/Cargo.lock new file mode 100644 index 0000000..88ffcd8 --- /dev/null +++ b/projecteuler/087/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "main" +version = "0.1.0" diff --git a/projecteuler/087/Cargo.toml b/projecteuler/087/Cargo.toml new file mode 100644 index 0000000..fca4e93 --- /dev/null +++ b/projecteuler/087/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "main" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/projecteuler/087/src/main.rs b/projecteuler/087/src/main.rs new file mode 100644 index 0000000..1171b80 --- /dev/null +++ b/projecteuler/087/src/main.rs @@ -0,0 +1,62 @@ +use std::collections::HashSet; +use std::time::Instant; + +fn primes(max_prime: u32) -> Vec { + 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); +}