| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <stdbool.h>
- 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;
- }
- }
- }
|