68 lines
1.8 KiB
Zig
68 lines
1.8 KiB
Zig
const std = @import("std");
|
|
const sieve = @import("sieve.zig");
|
|
const PrimeGen = sieve.PrimeGen;
|
|
const heap = std.heap;
|
|
|
|
const stdout = std.io.getStdOut().writer();
|
|
pub fn main() !void {
|
|
try part1();
|
|
try part2();
|
|
try part3();
|
|
}
|
|
|
|
// exercize 1: Print small primes
|
|
fn part1() !void {
|
|
var arena = heap.ArenaAllocator.init(heap.page_allocator);
|
|
defer arena.deinit();
|
|
|
|
var primes = PrimeGen(u8).init(&arena.allocator);
|
|
defer primes.deinit();
|
|
|
|
try stdout.print("The first 20 primes:", .{});
|
|
while (try primes.next()) |p| {
|
|
try stdout.print(" {}", .{p});
|
|
if (primes.count == 20)
|
|
break;
|
|
}
|
|
try stdout.print("\nThe primes between 100 and 150:", .{});
|
|
while (try primes.next()) |p| if (p >= 100 and p <= 150)
|
|
try stdout.print(" {}", .{p});
|
|
try stdout.print("\n", .{});
|
|
}
|
|
|
|
// exercize 2: count medium primes
|
|
fn part2() !void {
|
|
var arena = heap.ArenaAllocator.init(heap.page_allocator);
|
|
defer arena.deinit();
|
|
|
|
var primes = PrimeGen(sieve.autoSieveType(8000)).init(&arena.allocator);
|
|
defer primes.deinit();
|
|
|
|
var count: i32 = 0;
|
|
while (try primes.next()) |p| {
|
|
if (p > 8000)
|
|
break;
|
|
if (p > 7700)
|
|
count += 1;
|
|
}
|
|
try stdout.print("There are {} primes between 7700 and 8000.\n", .{count});
|
|
}
|
|
|
|
// exercize 3: find big primes
|
|
fn part3() !void {
|
|
var arena = heap.ArenaAllocator.init(heap.page_allocator);
|
|
defer arena.deinit();
|
|
|
|
var primes = PrimeGen(u32).init(&arena.allocator);
|
|
defer primes.deinit();
|
|
|
|
var c: u32 = 10;
|
|
while (try primes.next()) |p| {
|
|
if (primes.count == c) {
|
|
try stdout.print("The {}th prime is {}\n", .{ c, p });
|
|
if (c == 100_000_000)
|
|
break;
|
|
c *= 10;
|
|
}
|
|
}
|
|
}
|