49 lines
646 B
C
49 lines
646 B
C
#include <stdlib.h>
|
|
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
|
|
int is_prime(long num)
|
|
{
|
|
int i = 5;
|
|
int w = 2;
|
|
|
|
if (num == 1)
|
|
return 0;
|
|
if (num == 2 || num == 3)
|
|
return 1;
|
|
if (!(num%2) || !(num%3))
|
|
return 0;
|
|
|
|
while ((i*i) <= num) {
|
|
if (!(num%i))
|
|
return 0;
|
|
i += w;
|
|
w = 6 - w;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
char* eratosthenes(long num)
|
|
{
|
|
long i, j;
|
|
char* primes;
|
|
|
|
primes = (char*)malloc((num+1)*sizeof(char));
|
|
if (primes == NULL) {
|
|
return NULL;
|
|
}
|
|
|
|
memset(primes, TRUE, num);
|
|
primes[1] = FALSE;
|
|
|
|
for (i=2; i<=num; i++)
|
|
if (primes[i])
|
|
/* Mark factors as composite */
|
|
for (j=i*i; j<num; j+=i)
|
|
primes[j] = FALSE;
|
|
|
|
return primes;
|
|
}
|