From 708aafb362b64fbb2e002718f739b5d04e06931c Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Tue, 27 Jun 2023 18:57:46 +0200 Subject: [PATCH] add 95 (WIP) --- src/euler95/Cargo.toml | 8 +++++++ src/euler95/src/main.rs | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/euler95/Cargo.toml create mode 100644 src/euler95/src/main.rs diff --git a/src/euler95/Cargo.toml b/src/euler95/Cargo.toml new file mode 100644 index 0000000..38eb5dd --- /dev/null +++ b/src/euler95/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "euler95" +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/src/euler95/src/main.rs b/src/euler95/src/main.rs new file mode 100644 index 0000000..0bf37d4 --- /dev/null +++ b/src/euler95/src/main.rs @@ -0,0 +1,51 @@ +const MAX: usize = 1_000; + +fn main() { + let mut numbers: Vec<_> = (0_usize..MAX + 1).map(|_| true).collect(); + + let mut chains = vec![]; + + let mut i = 0_usize; + loop { + if i > MAX { + break; + } + let mut num = if numbers[i] { + numbers[i] = false; + i + } else { + i += 1; + continue; + }; + + let mut maybe_chain = vec![]; + + loop { + let next: usize = get_proper_divisors(num).sum(); + if next > MAX { + break; + } + + if !numbers[next] { + if maybe_chain.contains(&next) { + chains.push(maybe_chain); + } + break; + } + + numbers[next] = false; + maybe_chain.push(num); + + num = next; + } + + i += 1; + } + + dbg!(chains); +} + +fn get_proper_divisors(x: usize) -> impl Iterator { + let limit = x / 2 + 1; + (1..limit).filter(move |i| x % *i == 0) +}