Using a vector in implementing a basic prime sieve.
Using a vector in implementing a basic prime sieve.
#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_UP_TO 100000
#define CAPACITY 300000
#define NAME bump_alloc
#define ITEM bool
#define ALLOC bump_alloc
#define NAME sieve_vec
if (n == 0 || n == 1) {
return n;
}
size_t left = 1;
size_t right = n;
size_t mid;
size_t result = 0;
while (left <= right) {
mid = left + (right - left) / 2;
size_t square = mid * mid;
if (square == n) {
return mid;
}
if (square < n) {
result = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
sieve_vec_iter_const iter = sieve_vec_get_iter_const(sieve);
sieve_vec_iter_const_next(&iter);
sieve_vec_iter_const_next(&iter);
size_t index = 2;
bool const* is_not_prime;
while ((is_not_prime = sieve_vec_iter_const_next(&iter))) {
if (!*is_not_prime) {
}
index++;
}
}
size_t size = sieve_vec_size(sieve);
for (size_t factor = 2; factor <= sqrt; factor++) {
for (
size_t index = factor * 2; index <
size; index += factor) {
DC_LOG(*log,
DC_DEBUG,
"marking %zu as not prime (factor: %zu)", index, factor);
*sieve_vec_write(sieve, index) = true;
}
}
}
size_t up_to = 28;
bump_alloc_buffer buf;
bump_alloc alloc = bump_alloc_new(&buf, stdalloc_get_ref());
sieve_vec values = sieve_vec_new_with_defaults(up_to, false, &alloc);
sieve_vec_delete(&values);
}
new_global)((
NS(
DC_LOGGER, global_config)){.stream = stdout, .ansi_colours =
true},
return 0;
}
static DC_PUBLIC size_t size(SELF const *self)
static dc_cpu_features dc_cpu_features_get()
static DC_PUBLIC void dc_cpu_features_debug(dc_cpu_features const *self, dc_debug_fmt fmt, FILE *stream)
#define DC_DEBUG(DEBUG_FN, DEBUG_PTR)
#define DC_ASSERT(expr,...)
static size_t sqrt_size_t(size_t n)
static void example_prime_sieve(DC_LOGGER *parent)
static void compute(sieve_vec *sieve, DC_LOGGER *log)
static void display(sieve_vec const *sieve, DC_LOGGER *log)
#define DC_SCOPED(type,...)
RAII in C. Call the destructor when the variable goes out of scope.
#define DC_LOGGER_NEW(...)