// Eratosthenes' sieve #include #include #define SIZE 10000000 int fill_sieve(int *psieve); int sort_sieve(int *psieve); int print_sieve(int *psieve); int main(void) { int *psieve = NULL; psieve = (int *)malloc(SIZE*sizeof(int)); if(psieve == NULL) { printf("\nNot enough memory.\n"); return 1; } fill_sieve(psieve); sort_sieve(psieve); print_sieve(psieve); free(psieve); return 0; } int fill_sieve(int *psieve) { for(int i = 0; i < SIZE; i++) psieve[i] = i; return 0; } int sort_sieve(int *psieve) { for(int i = 2; i < SIZE; i++) for(int j = i * 2; j < SIZE; j += i) psieve[j] = 0; return 0; } int print_sieve(int *psieve) { FILE *pfile = NULL; char *filename = "primes.txt"; if(!(pfile = fopen(filename, "w"))) { printf("Error opening %s for writing.", filename); exit(1); } for(int i = 2; i < SIZE; i++) if(psieve[i] != 0) fprintf(pfile, "%d\n", psieve[i]); fclose(pfile); return 0; }