73 lines
978 B
C
73 lines
978 B
C
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
int *SieveArray;
|
||
|
|
||
|
void InitSieve(unsigned int Max)
|
||
|
{
|
||
|
unsigned int i;
|
||
|
for (i=0; i <= Max; i++)
|
||
|
{
|
||
|
SieveArray[i] = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sieve(unsigned int Max)
|
||
|
{
|
||
|
unsigned int i,j;
|
||
|
unsigned int low_max = sqrt(Max);
|
||
|
for( i = 2; i <= low_max; i++)
|
||
|
{
|
||
|
for ( j = i*2; j <= Max; j += i)
|
||
|
{
|
||
|
SieveArray[j] = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ShowResults(unsigned int Max)
|
||
|
{
|
||
|
unsigned int i;
|
||
|
for (i =3; i <= Max; i++)
|
||
|
{
|
||
|
if (SieveArray[i])
|
||
|
{
|
||
|
printf("%d\n", i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main(int argc ,char **argv)
|
||
|
{
|
||
|
unsigned int Max;
|
||
|
|
||
|
if(argc < 2) {
|
||
|
printf("primes.sieve.c <Max>\n");
|
||
|
return 1;
|
||
|
} else {
|
||
|
Max = atoi(argv[1]);
|
||
|
}
|
||
|
|
||
|
if(Max < 1)
|
||
|
{
|
||
|
printf("Invalid Max specified\n");
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
SieveArray = (int*) malloc(sizeof(int)*Max);
|
||
|
if(!SieveArray)
|
||
|
{
|
||
|
printf("Error: could not allocate SieveArray at Max:%d\n", Max);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
InitSieve(Max);
|
||
|
Sieve(Max);
|
||
|
ShowResults(Max);
|
||
|
|
||
|
free(SieveArray);
|
||
|
|
||
|
return 0;
|
||
|
}
|