Pagini recente » Cod sursa (job #2296279) | Cod sursa (job #247646) | Cod sursa (job #722916) | Cod sursa (job #1922788) | Cod sursa (job #251758)
Cod sursa(job #251758)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define in "ciur.in"
#define out "ciur.out"
#define MAX 2000000
unsigned long sieve(unsigned long n)
{
unsigned long nr, i, j, l;
unsigned char s[MAX/2+1];
if (n == 2)
{
return 1;
}
nr = 1;
for (i = 3; i <= n; i+=2 )
{
if ((s[i/2/8] & (1<<i/2%8))== 0)
{
nr++;
j = i * i;
l = 2 * i;
while (j <= n)
{
//printf("i %ld j %ld j/2 %ld\n",i, j, j/2);
s[j / 2 / 8] |= 1<<(j/2%8);
j += l;
}
}
}
return nr;
}
int main()
{
unsigned long n;
FILE *fin, *fout;
if ((fin = fopen(in, "r")) == NULL)
{
printf("Eroare \n");
exit(-1);
}
fscanf(fin, "%ld", &n);
fclose(fin);
fout = fopen(out, "w");
n = sieve(n);
printf("%ld\n", n);
fprintf(fout,"%ld", n);
fclose(fout);
return 0;
}