#include "primes.hpp" bool search_prime_constellation( mpz_t& start_interval, mpz_t& end_interval, unsigned int k, // size of prime constellation unsigned int offsets[], // k-1 offsets mpz_t& first_prime) { // found result (if returning true) mpz_t p; mpz_init_set(p, start_interval); mpz_t q; mpz_init(q); bool found = false; for(;;) { // lookout for the next prime in the interval mpz_nextprime(p, p); if (mpz_cmp(p, end_interval) > 0) break; // p is apparently prime, check for an constellation found = true; for (int i = 0; i < k-1; ++i) { unsigned int offset = offsets[i]; mpz_add_ui(q, p, offset); if (mpz_probab_prime_p(q, 10) < 1) { found = false; break; // not a prime } } if (found) break; } if (found) { mpz_set(first_prime, p); } mpz_clear(p); mpz_clear(q); return found; }