#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
int main(int argc, char* argv[])
{
int n, m, lim;
double s;
char* nums;
char input[255];
clock_t start, stop;
if (argc == 2)
lim = atoi(argv[1]);
else
{
printf("Enter a limit for this search (empty for default): ");
gets(input);
if (input[0])
lim = atoi(input);
else
lim = 100000000;
}
s = sqrt(lim);
start = clock();
nums = (char *)calloc(lim + 1, sizeof(char));
for (n = 2; n < s; n++)
{
if (nums[n] == FALSE)
{
m = n * n;
while (m <= lim)
{
nums[m] = TRUE;
m += n;
}
}
}
stop = clock();
printf("It took %f seconds.\n", (double)(stop - start) / 1000);
printf("Do you want to list the results, count total, or do nothing (L/C/N)? ");
gets(input);
if (input[0] == 'L' || input[0] == 'l' || input[0] == 'C' || input[0] == 'c')
{
m = 0;
for (n = 2; n < lim; n++)
{
if (nums[n] == FALSE)
{
if (input[0] == 'L' || input[0] == 'l')
printf("%d\n", n);
m++;
}
}
printf("Total primes = %d\n\n", m);
printf("Press ENTER to exit. . . ");
getchar();
}
free(nums);
return 0;
}