Initial commit

This commit is contained in:
2026-03-17 09:50:10 +01:00
commit a20d560133
4 changed files with 313 additions and 0 deletions

73
src/main.zig Normal file
View File

@@ -0,0 +1,73 @@
const std = @import("std");
pub fn main() !void {
var gpa: std.heap.DebugAllocator(.{}) = .init;
const allocator = gpa.allocator();
defer _ = gpa.deinit();
const input = try getInput("Please enter a number: ");
var primes = try getPrimes(input, allocator);
defer primes.deinit(allocator);
var stdout_buffer: [100]u8 = undefined;
var stdout = std.fs.File.stdout().writer(&stdout_buffer);
var output = &stdout.interface;
if (primes.items.len == 0) {
try output.writeAll("No prime numbers were found.\n");
} else {
try output.print("Displaying {d} prime numbers from 2 to {d}:\n", .{primes.items.len, primes.items[primes.items.len - 1]});
for (primes.items) |prime| {
try output.print("{d} ", .{prime});
}
}
try output.flush();
}
fn getInput(message: []const u8) !usize {
var stdout_buffer: [100]u8 = undefined;
var stdout = std.fs.File.stdout().writer(&stdout_buffer);
var output = &stdout.interface;
var stdin_buffer: [100]u8 = undefined;
var stdin = std.fs.File.stdin().reader(&stdin_buffer);
var line_buffer: [100]u8 = undefined;
var w: std.io.Writer = .fixed(&line_buffer);
while (true) {
try output.writeAll(message);
try output.flush();
const line_length = try stdin.interface.streamDelimiterLimit(&w, '\n', .unlimited);
const input_line = line_buffer[0..line_length];
const res = std.fmt.parseInt(usize, input_line, 10) catch {
continue;
};
return res;
}
}
fn getPrimes(max: usize, allocator: std.mem.Allocator) !std.ArrayList(usize) {
var primes: std.ArrayList(usize) = .empty;
for (2..max+1) |i| {
if (isPrime(i)) try primes.append(allocator, i);
}
return primes;
}
fn isPrime(n: usize) bool {
if (n < 2) return false;
for (2..n) |i| {
if (n % i == 0) return false;
}
return true;
}