// // Tomás Oliveira e Silva, AED, October 2021 // // This program implements a simple sieve of Eratosthenes. // It does not work as intended. Use the valgrind and // gdb programs to find the programming errors. Correct them. // #include #include int main(void) { const int limit = 1000000; int *sieve = (int *)malloc((size_t)limit); if(sieve == NULL) return 1; for(int i = 0;i <= limit;i++) sieve[i] = 0; sieve[0] = sieve[1] = 1; // 0 and 1 are not prime for(int p = 2;p * p <= limit;p++) if(sieve[p] == 0) for(int i = p * p;i <= limit;i += p) sieve[i] = 1; // i is not prime int c = 0; for(int i = 0;i <= limit;i++) if(sieve[i] == 0) c++; printf("There are %d prime numbers up to %d\n",c,limit); free(sieve); return 0; }