| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #ifdef _PRIMES_H
- #define _PRIMES_H
- #include <stdint.h>
- #include <stdbool.h>
- #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 */
|