エラトステネスのふるいを使って素数を発生するプログラムです。
Rustで書いてみました。
RustはPythonと違って、型にうるさいですね。こうでもしないとバグが取れないのかもしれませんが。
コンパイル:rustc sieve.rs
実行:./sieve N
sieve.rs
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
let n=&args[1];
let n:i32=n.parse().unwrap();
let f:Vec <i32>=sieve(n);
let l:i32=f.len() as i32;
println! ("{:?} : {:?} ",l,f);
}
fn sieve(n:i32)->Vec<i32> {
let mut tab:Vec<i32>=(2..=n).rev().collect();
let mut l:Vec<i32>=vec![];
while !tab.is_empty() {
let v:i32=match tab.pop() { Some(value)=>value, None=>1 };
l.push(v);
tab.retain(|&x| x%v !=0);
}
l
}