Files
prime-numbers/src/main.zig
2026-04-28 15:48:42 +02:00

74 lines
2.1 KiB
Zig

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;
}