diff --git a/src/bin/problem_50.rs b/src/bin/problem_50.rs new file mode 100644 index 0000000..5906fa9 --- /dev/null +++ b/src/bin/problem_50.rs @@ -0,0 +1,37 @@ +fn main() { + println!("{}", solve()) +} + +fn solve() -> usize { + let mut primes = vec![]; + + for n in 2..=1000000 { + let prime_check_max = (n as f64).sqrt().ceil() as usize; + let mut is_prime = true; + for prime in primes.clone() { + if n % prime == 0 { + is_prime = false; + break; + } else if prime > prime_check_max { + break; + } + } + if is_prime { + primes.push(n); + } + } + + let mut chain_length = primes.len() - 1; + loop { + for prime_window in primes.windows(chain_length) { + let sum = prime_window.iter().map(|&prime| prime).sum::(); + if primes.contains(&sum) { + return sum + } + if sum > 1000000 { + break; + } + } + chain_length -= 1; + } +} \ No newline at end of file