diff --git a/050/main.rs b/050/main.rs new file mode 100644 index 0000000..46c9bfa --- /dev/null +++ b/050/main.rs @@ -0,0 +1,71 @@ +use std::collections::HashSet; +use std::env; + +fn er() -> Vec { + let mut nums = Vec::new(); + let size = 4000000; + for n in 0..size+1 { nums.push(true); } + let mut p = 1; + loop { + let mut found = false; + for i in p+1..size { + if nums[i] { + found = true; + p = i; + break; + } + } + if !found { break; } + for i in (2 * p .. size).step_by(p) { + nums[i] = false; + } + } + let mut res = Vec::new(); + for i in 2..size { + if nums[i] { res.push(i as u64); } + } + return res; +} + +fn span(l: usize, ps: &Vec, hs: &HashSet) -> u64 { + let mut sum = 0u64; + let mut max = 0u64; + + for i in 0..ps.len() { + sum += ps.get(i).unwrap(); + if i >= l { + sum -= ps.get(i - l).unwrap(); + } + if sum > 1000000 { + continue; + } + if hs.contains(&sum) && i >= l { + if sum > max { + max = sum; + } + } + } + return max; +} + +fn main() { + //env::set_var("RUST_BACKTRACE", "full"); + let ps = er(); + let mut hs = HashSet::new(); + for p in ps.iter() { + hs.insert(*p); + } + let mut max = 0; + //let mut l_max = 0; + for s in 1..ps.len() - 1 { + let m = span(s, &ps, &hs); + if m > 0 { + //l_max = s; + max = m; + println!("{} {}", s, m); + } + } + + println!("{}", max); + +}