fork download
  1. #include <stdlib.h>
  2. #include <math.h>
  3. #include <stdio.h>
  4. void sieve_of_eratosthenes(int n, int **isprime, int **primes_beg, int **primes_end) {
  5. int i, m, j, nbytes = (1 + n) * sizeof **isprime, *map = malloc(nbytes), *beg = malloc(nbytes), *end;
  6. for (i = 2; i <= n; i++) map[i] = 1;
  7. for (i = 2, m = sqrt(n); i <= m; i++)
  8. if (map[i]) for (j = i * i; j <= n; j += i) map[j] = 0;
  9. for (i = 2, end = beg; i <= n; i++) if (map[i]) *end++ = i;
  10. *isprime = map, *primes_beg = beg, *primes_end = end;
  11. }
  12. int main() {
  13. int n = 1234567, *isprime, *primes_beg, *primes_end;
  14. sieve_of_eratosthenes(n, &isprime, &primes_beg, &primes_end);
  15.  
  16. int *a, *b, c, count = 0;
  17. for (a = primes_beg; a < primes_end && *a <= n / 3; a++)
  18. for (b = a; b < primes_end && *b <= (c = n - *a - *b); b++)
  19. if (isprime[c]) count++;
  20. printf("count = %d\n", count);
  21. return 0;
  22. }
  23.  
Success #stdin #stdout 1.72s 7116KB
stdin
Standard input is empty
stdout
count = 151060650