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::<usize>(); if primes.contains(&sum) { return sum; } if sum > 1000000 { break; } } chain_length -= 1; } }