14#define MAX_UP_TO 100000
17#define CAPACITY 300000
18#define NAME bump_alloc
22#define ALLOC bump_alloc
27 if (n == 0 || n == 1) {
34 while (left <= right) {
35 mid = left + (right - left) / 2;
36 size_t square = mid * mid;
53static void display(sieve_vec
const* sieve) {
54 sieve_vec_iter_const iter = sieve_vec_get_iter_const(sieve);
56 sieve_vec_iter_const_next(&iter);
57 sieve_vec_iter_const_next(&iter);
60 bool const* is_not_prime;
61 while ((is_not_prime = sieve_vec_iter_const_next(&iter))) {
63 printf(
"%zu is prime\n", index);
70 size_t size = sieve_vec_size(sieve);
72 printf(
"Sieve size: %zu, sqrt: %zu\n",
size, sqrt);
73 for (
size_t factor = 2; factor <= sqrt; factor++) {
74 for (
size_t index = factor * 2; index <
size; index += factor) {
75 printf(
"Marking %zu as not prime (factor: %zu)\n", index, factor);
76 *sieve_vec_write(sieve, index) =
true;
87 printf(
"Listing primes up to: %zu\n", up_to);
88 bump_alloc_buffer buf;
89 bump_alloc alloc = bump_alloc_new(&buf, stdalloc_get_ref());
90 sieve_vec values = sieve_vec_new_with_defaults(up_to,
false, &alloc);
93 sieve_vec_delete(&values);
static DC_PUBLIC size_t size(SELF const *self)
static DC_PUBLIC void dc_cpu_features_dump(FILE *stream)
#define DC_ASSERT(expr,...)
static size_t sqrt_size_t(size_t n)
static void display(sieve_vec const *sieve)
static void compute(sieve_vec *sieve)