diff --git a/010/main.rs b/010/main.rs new file mode 100644 index 0000000..08b4e50 --- /dev/null +++ b/010/main.rs @@ -0,0 +1,36 @@ +// based on ../007/main.rs + +const SIZE: usize = 2000000; // 10 as test should be =17 +type Rs = [bool; SIZE + 1]; + +fn remove_divs(m: usize, xs: &mut Rs) { + let mut i = m + m; + while i <= SIZE { + xs[i] = false; + i += m; + } +} + +fn get_next_p(m_from: usize, xs: &Rs) -> Option { + for k in (m_from + 1)..=SIZE { + if xs[k] { return Some(k); } + } + return None; +} + +fn main() { + let mut xs: Rs = [true; SIZE + 1]; + let mut sum = 0usize; + let mut last_p = 1; + loop { + match get_next_p(last_p, &xs) { + Some(p) => { + sum += p; + last_p = p; + }, + None => break + } + remove_divs(last_p, &mut xs); + } + println!("sum: {}", sum); +}