Aliquot Sequence Research  2.0
Compute properties of the sum-of-proper-divisors function.
moewsmoews_sieve.h
Go to the documentation of this file.
1 
10 #ifndef POMYANG_KPARENT_INC_MOEWSMOEWS_SIEVE_H_
11 #define POMYANG_KPARENT_INC_MOEWSMOEWS_SIEVE_H_
12 
13 #include <stdbool.h>
14 #include <stdint.h>
15 #include <stdlib.h>
16 #include <sys/types.h>
17 
37 typedef struct {
38  size_t bound;
39  size_t seg_len;
40  size_t buf_len;
41  size_t primes_len;
42  uint32_t *primes;
44 
71 typedef struct {
73  size_t seg_start;
74  uint64_t *sigma_buf;
75  uint64_t *q_buf;
77  bool squared;
78  bool *is_prime_buf;
80 
87 void moews_sieve_odd_standard(sieve_worker_t *worker, uint64_t seg_start);
88 
95 void moews_sieve_odd_squared(sieve_worker_t *worker, uint64_t seg_start);
96 
104 uint64_t moews_lookup_sigma_m(const sieve_worker_t *worker, uint64_t m);
105 
113 uint64_t moews_lookup_sigma_m_squared(const sieve_worker_t *worker, uint64_t m);
114 
122 sieve_config_t *moews_init_sieve(size_t bound, size_t seg_len);
123 
130 
138 
144 void destroy_worker(sieve_worker_t *worker);
145 
153 bool moews_check_prime(const sieve_worker_t *worker, uint64_t m);
154 
163 size_t moews_estimate_heap_usage(size_t bound, size_t seg_len, size_t num_workers);
164 
165 #endif // POMYANG_KPARENT_INC_MOEWSMOEWS_SIEVE_H_
sieve_worker_t::cfg
const sieve_config_t * cfg
Definition: moewsmoews_sieve.h:72
sieve_worker_t::seg_start
size_t seg_start
Definition: moewsmoews_sieve.h:73
sieve_worker_t::last_sieve_standard
ssize_t last_sieve_standard
Definition: moewsmoews_sieve.h:76
sieve_config_t::seg_len
size_t seg_len
Definition: moewsmoews_sieve.h:39
sieve_worker_t::q_buf
uint64_t * q_buf
Definition: moewsmoews_sieve.h:75
sieve_worker_t::sigma_buf
uint64_t * sigma_buf
Definition: moewsmoews_sieve.h:74
moews_init_sieve
sieve_config_t * moews_init_sieve(size_t bound, size_t seg_len)
creates a sieve_config_t which is shared by a pool of workers
Definition: moewsmoews_sieve.c:201
sieve_config_t::primes_len
size_t primes_len
Definition: moewsmoews_sieve.h:41
moews_sieve_odd_standard
void moews_sieve_odd_standard(sieve_worker_t *worker, uint64_t seg_start)
runs sieve for odd sigma(m)
Definition: moewsmoews_sieve.c:245
sieve_worker_t
Worker which holds state about a single thread running the sieve.
Definition: moewsmoews_sieve.h:71
moews_estimate_heap_usage
size_t moews_estimate_heap_usage(size_t bound, size_t seg_len, size_t num_workers)
estimates how much heap the sieving buffers will require
Definition: moewsmoews_sieve.c:297
sieve_config_t
Configuration and computed values needed to operate sieve, only 1 needed for multiple threads.
Definition: moewsmoews_sieve.h:37
destroy_worker
void destroy_worker(sieve_worker_t *worker)
free's memory associated with sieve_worker_t
Definition: moewsmoews_sieve.c:237
sieve_worker_t::is_prime_buf
bool * is_prime_buf
Definition: moewsmoews_sieve.h:78
sieve_worker_t::squared
bool squared
Definition: moewsmoews_sieve.h:77
moews_lookup_sigma_m
uint64_t moews_lookup_sigma_m(const sieve_worker_t *worker, uint64_t m)
lookup sigma(m) from m in a sieved block
Definition: moewsmoews_sieve.c:263
moews_lookup_sigma_m_squared
uint64_t moews_lookup_sigma_m_squared(const sieve_worker_t *worker, uint64_t m)
lookup sigma(m * m) from m in a sieved block
Definition: moewsmoews_sieve.c:275
moews_sieve_odd_squared
void moews_sieve_odd_squared(sieve_worker_t *worker, uint64_t seg_start)
takes odd m in range and runs sieve for sigma(m * m)
Definition: moewsmoews_sieve.c:258
sieve_config_t::buf_len
size_t buf_len
Definition: moewsmoews_sieve.h:40
moews_destroy_sieve
void moews_destroy_sieve(sieve_config_t *cfg)
free's memory associated with sieve_config_t
Definition: moewsmoews_sieve.c:220
moews_check_prime
bool moews_check_prime(const sieve_worker_t *worker, uint64_t m)
checks if odd numbers in range (seg_start, seg_start + seg_len) is prime
Definition: moewsmoews_sieve.c:287
moews_init_worker
sieve_worker_t * moews_init_worker(const sieve_config_t *cfg)
creates a worker object which can be used to run the sieve
Definition: moewsmoews_sieve.c:226
sieve_config_t::primes
uint32_t * primes
Definition: moewsmoews_sieve.h:42
sieve_config_t::bound
size_t bound
Definition: moewsmoews_sieve.h:38