From 032729045495207507f7fc05b77341ebf945f001 Mon Sep 17 00:00:00 2001 From: timeshifter Date: Mon, 24 Mar 2025 16:15:16 +0100 Subject: [PATCH] 46 --- src/euler46/Cargo.toml | 8 ++++++++ src/euler46/src/main.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/euler46/Cargo.toml create mode 100644 src/euler46/src/main.rs diff --git a/src/euler46/Cargo.toml b/src/euler46/Cargo.toml new file mode 100644 index 0000000..7791fc9 --- /dev/null +++ b/src/euler46/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "euler46" +version = "0.1.0" +edition = "2024" + +[dependencies] +itertools = "0.14" +primes = { version = "*", path = "../../lib/primes" } diff --git a/src/euler46/src/main.rs b/src/euler46/src/main.rs new file mode 100644 index 0000000..b3de9b9 --- /dev/null +++ b/src/euler46/src/main.rs @@ -0,0 +1,26 @@ +use primes::Primes; + +const MAX: usize = 1_000_000; + +fn main() { + let primes = Primes::get_between(2, MAX); + 'outer: for number in iter_odd_composite_numbers(&primes) { + for prime in primes.iter().take_while(|p| **p < number) { + 'inner: for n in 1_usize.. { + let sum = prime + 2 * n.pow(2); + if sum == number { + continue 'outer; + } + if sum > number { + break 'inner; + } + } + } + println!("{number}"); + break 'outer; + } +} + +fn iter_odd_composite_numbers(primes: &Primes) -> impl Iterator { + (3..MAX).step_by(2).filter(|n| !primes.contains(n)) +}