Pagini recente » Cod sursa (job #1598362) | Cod sursa (job #903816) | Cod sursa (job #322680) | Cod sursa (job #386759) | Cod sursa (job #1232561)
#include <stdio.h>
#include <memory.h>
#define N 2000001
#define FIN "ciur.in"
#define FOUT "ciur.out"
FILE *fin,
*fout;
char sita[ N / 8 + 1];
int checkOne(int n, int p)
{
return (sita[ n ] >> p) & 1;
}
void one(int n, int p)
{
int mask = 1;
mask <<= p;
sita[ n ] |= mask;
}
void Erathostene()
{
int i,
j;
for( i = 2; i * i <= N; i++ )
{
if( !checkOne( i / 8, i % 8 ) )
{
j = 2;
while( i * j <= N )
{
one( (i*j) / 8, (i*j) % 8);
j++;
}
}
}
};
int isPrime( int n )
{
return !checkOne( n / 8, n % 8 );
}
int main() {
int i, num, count = 0;
fin = fopen(FIN, "r");
fout = fopen(FOUT, "w");
memset(sita, 0, sizeof( sita ));
Erathostene();
fscanf(fin, "%d", &num);
for(i = 2; i <= num; i++)
{
if( isPrime(i) )
{
count++;
}
}
fprintf(fout, "%d", count);
fclose( fin );
fclose( fout );
return(0);
};