Initial commit
This commit is contained in:
73
src/main.zig
Normal file
73
src/main.zig
Normal file
@@ -0,0 +1,73 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user