// Sieve of Eratosthenes fn init_array(len: i64) -> [i64] { let nums = [0; len]; let mut i = 0; while (i < nums.length) { nums[i] = i; i=i+1; } nums } fn sieve_all(nums: [i64]) -> () { let mut i = 2; while (i < nums.length) { sieve(nums, i); i=i+1; } } fn sieve(nums: [i64], n: i64) -> () { let i = 2*n; while (i < nums.length) { nums[i] = 0; i=i+n; } } fn print_primes(nums: [i64]) -> () { print("Primes less than "); printi64(nums.length); print(": "); let mut i = 2; while (i < nums.length) { if (nums[i] != 0) { printi64(nums[i]); print(" "); } i=i+1; } println(""); } fn main(args: [String]) -> () { if (args.length != 1) { println("Unspecified numsber."); return () } println(""); let n = parsei64(args[0], 0); if (n <= 0) { println("Invalid array length"); return () } let nums = init_array(n); sieve_all(nums); print_primes(nums); }