#include <stdlib.h>
#include <math.h>
#include <stdio.h>
void sieve_of_eratosthenes(int n, int **isprime, int **primes_beg, int **primes_end) {
int i
, m
, j
, nbytes
= (1 + n
) * sizeof **isprime
, *map
= malloc(nbytes
), *beg
= malloc(nbytes
), *end
; for (i = 2; i <= n; i++) map[i] = 1;
for (i
= 2, m
= sqrt(n
); i
<= m
; i
++) if (map[i]) for (j = i * i; j <= n; j += i) map[j] = 0;
for (i = 2, end = beg; i <= n; i++) if (map[i]) *end++ = i;
*isprime = map, *primes_beg = beg, *primes_end = end;
}
int main() {
int n = 1234567, *isprime, *primes_beg, *primes_end;
sieve_of_eratosthenes(n, &isprime, &primes_beg, &primes_end);
int *a, *b, c, count = 0;
for (a = primes_beg; a < primes_end && *a <= n / 3; a++)
for (b = a; b < primes_end && *b <= (c = n - *a - *b); b++)
if (isprime[c]) count++;
printf("count = %d\n", count
); return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8c3RkaW8uaD4Kdm9pZCBzaWV2ZV9vZl9lcmF0b3N0aGVuZXMoaW50IG4sIGludCAqKmlzcHJpbWUsIGludCAqKnByaW1lc19iZWcsIGludCAqKnByaW1lc19lbmQpIHsKICBpbnQgaSwgbSwgaiwgbmJ5dGVzID0gKDEgKyBuKSAqIHNpemVvZiAqKmlzcHJpbWUsICptYXAgPSBtYWxsb2MobmJ5dGVzKSwgKmJlZyA9IG1hbGxvYyhuYnl0ZXMpLCAqZW5kOwogIGZvciAoaSA9IDI7IGkgPD0gbjsgaSsrKSBtYXBbaV0gPSAxOwogIGZvciAoaSA9IDIsIG0gPSBzcXJ0KG4pOyBpIDw9IG07IGkrKykKICAgIGlmIChtYXBbaV0pIGZvciAoaiA9IGkgKiBpOyBqIDw9IG47IGogKz0gaSkgbWFwW2pdID0gMDsKICBmb3IgKGkgPSAyLCBlbmQgPSBiZWc7IGkgPD0gbjsgaSsrKSBpZiAobWFwW2ldKSAqZW5kKysgPSBpOwogICppc3ByaW1lID0gbWFwLCAqcHJpbWVzX2JlZyA9IGJlZywgKnByaW1lc19lbmQgPSBlbmQ7Cn0KaW50IG1haW4oKSB7CiAgaW50IG4gPSAxMjM0NTY3LCAqaXNwcmltZSwgKnByaW1lc19iZWcsICpwcmltZXNfZW5kOwogIHNpZXZlX29mX2VyYXRvc3RoZW5lcyhuLCAmaXNwcmltZSwgJnByaW1lc19iZWcsICZwcmltZXNfZW5kKTsKICAKICBpbnQgKmEsICpiLCBjLCBjb3VudCA9IDA7CiAgZm9yIChhID0gcHJpbWVzX2JlZzsgYSA8IHByaW1lc19lbmQgJiYgKmEgPD0gbiAvIDM7IGErKykKICAgIGZvciAoYiA9IGE7IGIgPCBwcmltZXNfZW5kICYmICpiIDw9IChjID0gbiAtICphIC0gKmIpOyBiKyspCiAgICAgIGlmIChpc3ByaW1lW2NdKSBjb3VudCsrOwogIHByaW50ZigiY291bnQgPSAlZFxuIiwgY291bnQpOwogIHJldHVybiAwOwp9Cg==