programming-examples/c/Numerical/C Program to Implement Sieve of Atkin to Generate Prime Numbers Between Given Range.c

59 lines
2.0 KiB
C
Raw Normal View History

2019-11-15 12:59:38 +01:00
#include <stdio.h>
#include <math.h>
int main()
{
int limit;
int wlimit;
int i, j, k, x, y, z;
unsigned char *sieb;
printf("Please insert a number up to which all primes are calculated: ");
scanf("%d", &limit);
sieb = (unsigned char *) calloc(limit, sizeof(unsigned char));
wlimit = sqrt(limit);
for (x = 1; x <= wlimit; x++)
{
for (y = 1; y <= wlimit; y++)
{
z = 4 * x * x + y * y;
if (z <= limit && (z % 60 == 1 || z % 60 == 13 || z % 60 == 17 || z
% 60 == 29 || z % 60 == 37 || z % 60 == 41 || z % 60 == 49
|| z % 60 == 53))
{
sieb[z] = !sieb[z];
}
z = 3 * x * x + y * y;
if (z <= limit && (z % 60 == 7 || z % 60 == 19 || z % 60 == 31 || z
% 60 == 43))
{
sieb[z] = !sieb[z];
}
z = 3 * x * x - y * y;
if (x > y && z <= limit && (z % 60 == 11 || z % 60 == 23 || z % 60
== 47 || z % 60 == 59))
{
sieb[z] = !sieb[z];
}
}
}
for (i = 5; i <= wlimit; i++)
{
if (sieb[i] == 1)
{
for (j = 1; j * i * i <= limit; j++)
{
sieb[j * i * i] = 0;
}
}
}
printf("The following primes have been calculated:\n2\n3\n5");
for (i = 5; i <= limit; i++)
{
if (sieb[i] == 1)
{
printf("\n%d", i);
}
}
scanf("%d", &i);
return 0;
}