Prime numbers whose neighboring pairs are tetraprimes: Difference between revisions

Content added Content deleted
(→‎{{header|Wren}}: Still not quite right, manually reverting last two edits.)
Tag: Manual revert
(→‎{{header|C}}: Wasn't quite right before - hence problem with Wren alignment.)
Line 216: Line 216:
}
}
return count == 4;
return count == 4;
}

int prevPrime(int n) {
size_t l = 0, r = size, m;
while (l < r) {
m = (l + r)/2;
if (primes[m] > n) {
r = m;
} else {
l = m + 1;
}
}
return primes[r-1];
}
}


Line 243: Line 256:
GArray *tetras;
GArray *tetras;
init();
init();
int highest5 = prevPrime(100000);
int highest6 = prevPrime(1000000);
int highest7 = primes[size - 1];
setlocale(LC_NUMERIC, "");
setlocale(LC_NUMERIC, "");
for (s = 0; s < size; ++s) {
for (s = 0; s < size; ++s) {
p = primes[s];
p = primes[s];

if (p < j) {
// process even numbers first as likely to have most factors
// process even numbers first as likely to have most factors
if (isTetraPrime(p-1) && isTetraPrime(p-2)) {
if (isTetraPrime(p-1) && isTetraPrime(p-2)) {
g_array_append_val(tetras1, p);
g_array_append_val(tetras1, p);
if ((p-1)%7 == 0 || (p-2)%7 == 0) ++sevens1;
if ((p-1)%7 == 0 || (p-2)%7 == 0) ++sevens1;
}
}

if (isTetraPrime(p+1) && isTetraPrime(p+2)) {
if (isTetraPrime(p+1) && isTetraPrime(p+2)) {
g_array_append_val(tetras2, p);
if ((p+1)%7 == 0 || (p+2)%7 == 0) ++sevens2;
g_array_append_val(tetras2, p);
}
if ((p+1)%7 == 0 || (p+2)%7 == 0) ++sevens2;
} else {
}
if (p == highest5 || p == highest6 || p == highest7) {
for (i = 0; i < 2; ++i) {
for (i = 0; i < 2; ++i) {
tetras = (i == 0) ? tetras1 : tetras2;
tetras = (i == 0) ? tetras1 : tetras2;
Line 263: Line 281:
t = (i == 0) ? "preceding" : "following";
t = (i == 0) ? "preceding" : "following";
printf("Found %'d primes under %'d whose %s neighboring pair are tetraprimes", c, j, t);
printf("Found %'d primes under %'d whose %s neighboring pair are tetraprimes", c, j, t);
if (j == 100000) {
if (p == highest5) {
printf(":\n");
printf(":\n");
for (k = 0; k < tetras->len; ++k) {
for (k = 0; k < tetras->len; ++k) {
Line 287: Line 305:
free(gaps);
free(gaps);
}
}
if (j == TEN_MILLION) break;
j *= 10;
j *= 10;
}
}