diff --git a/007/main b/007/main new file mode 100755 index 0000000..d8cd6b2 Binary files /dev/null and b/007/main differ diff --git a/007/main.rs b/007/main.rs new file mode 100644 index 0000000..3f55fb2 --- /dev/null +++ b/007/main.rs @@ -0,0 +1,35 @@ +const SIZE: usize = 1500000; // found this with manual binary search, it's legal! :) +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 q: usize = 1; + let mut count = 0; + loop { + match get_next_p(q, &xs) { + Some(p) => { + q = p; + count += 1; + if count == 10_001 { break; } + }, + None => break + } + remove_divs(q, &mut xs); + } + println!("[{}]: {}", count, q); +}