我正在尝试使用网站https://exercism.org/学习 Zig 。我正在解决这个练习,它要求我们找到第 n 个素数。
我的想法是在需要的时候生成所有这些comptime
并返回;这是我当前的代码:
const std = @import("std");
const mem = std.mem;
fn sieve(buffer: []usize, comptime limit: usize) []usize {
if (limit < 2)
return buffer[0..0];
const sqrt_limit = std.math.sqrt(limit);
var bitset = std.StaticBitSet(limit + 1).initFull();
var n: usize = 3;
var i: usize = 1;
buffer[0] = 2;
while(n <= sqrt_limit): (n += 2) {
if (!bitset.isSet(n))
continue;
buffer[i] = n;
i += 1;
var j = 2 * n;
while (j <= limit): (j += i) {
bitset.unset(j);
}
}
while (n <= limit) : (n += 2) {
if (!bitset.isSet(i))
continue;
buffer[i] = n;
i += 1;
}
return buffer[0..i];
}
const buffer_size = std.math.maxInt(usize);
const primes_buffer = [buffer_size]usize;
const primes = sieve(primes_buffer, buffer_size - 1);
pub fn prime(allocator: mem.Allocator, number: usize) !usize {
_ = allocator;
return primes[number-1];
}
但是当我尝试编译它时,出现以下错误:
nth_prime.zig:37:22: error: expected type '[]usize', found 'type'
nth_prime.zig:4:18: note: parameter type declared here
我不明白为什么这里primes_buffer
的类型是type
;它不应该是吗[]usize
?