#ifdef _PRIMES_H #define _PRIMES_H #include #include #include "da.h" DA_STRUCT_DEF(uint64_t, primes); bool isprime(uint64_t n); void primes_fill(struct primes_da *primes); void primes_fill_with(struct primes *primes, uint64_t n); #if defined(IMP) || defined(PRIMES_IMP) void primes_fill_with(struct primes *primes, uint64_t n) { uint64_t i = 0; for ( ; primes->size < n; ++i ) { if ( isprime(i) ) { DA_APPEND(*primes, i); } } } 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; } } } #endif /* defined(IMP) || defined(PRIMES_IMP) */ #endif /* _PRIMES_H */