#include #include #include #include struct primes_da { uint64_t *data; uint64_t size; uint64_t cap; }; bool isprime(uint64_t n); void primes_fill(struct primes_da *primes); int main(int argc, const char **argv) { uint64_t res = 0; uint64_t target = 10001; struct primes_da primes = {0}; primes.cap = target + 1; primes.data = calloc(primes.cap, sizeof(uint64_t)); primes.size = 0; primes_fill(&primes); res = primes.data[target-1]; printf("Result = %ld!\n", res); free(primes.data); (void) argc; (void) argv; return 0; } bool isprime(uint64_t n) { uint64_t i = 0; if ( (n & 1) == 0 ) { return ( n == 2 ); } for ( i = 2; i < n; ++i ) { if ( (n % i) == 0 ) { return false; } } return true; } void primes_fill(struct primes_da *primes) { uint64_t i = primes->size; if ( i == 0 ) { i = 2; } for ( ; primes->size < primes->cap; ++i ) { if ( isprime(i) ) { primes->data[primes->size++] = i; } } }