32 lines
863 B
C
32 lines
863 B
C
|
//
|
||
|
// 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 <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
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;
|
||
|
}
|