const std = @import("std"); pub fn main(init: std.process.Init) !void { const allocator = init.gpa; const io = init.io; var stdout_buffer: [1024]u8 = undefined; var stdout = std.Io.File.stdout().writer(io, &stdout_buffer); var output = &stdout.interface; const nmax = getInput(io, "Please enter a maximum prime seek number") catch |err| { try output.print("Error while acquiring number input: {}\n", .{err}); try output.flush(); return; }; var primes = getPrimes(allocator, nmax) catch |err| { try output.print("Failed to get primes: {}\n", .{err}); try output.flush(); return; }; defer primes.deinit(allocator); if (primes.items.len == 0) { try output.writeAll("No prime numbers were found\n"); try output.flush(); return; } const last = primes.items[primes.items.len - 1]; try output.print("Displaying {d} prime numbers from 2 to {d}:\n", .{primes.items.len, last}); for (primes.items) |prime| { try output.print("{d} ", .{prime}); } try output.flush(); } fn getInput(io: std.Io, message: []const u8) !usize { var stdin_buffer: [100]u8 = undefined; var stdout_buffer: [1024]u8 = undefined; var stdin = std.Io.File.stdin().reader(io, &stdin_buffer); var stdout = std.Io.File.stdout().writer(io, &stdout_buffer); var line_buffer: [100]u8 = undefined; var w: std.Io.Writer = .fixed(&line_buffer); try stdout.interface.print("{s}: ", .{message}); try stdout.flush(); const line_length = try stdin.interface.streamDelimiterLimit(&w, '\n', .unlimited); const input: []const u8 = line_buffer[0..line_length]; return std.fmt.parseInt(usize, input, 10); } fn getPrimes(allocator: std.mem.Allocator, n_max: usize) !std.ArrayList(usize) { var primes: std.ArrayList(usize) = .empty; for (2..n_max+1) |i| { if (isPrime(i)) try primes.append(allocator, i); } return primes; } fn isPrime(n: usize) bool { for (2..n) |i| { if (n % i == 0) return false; } return true; }