Cod sursa(job #1184575)

Utilizator crucerucalinCalin-Cristian Cruceru crucerucalin Data 13 mai 2014 11:08:55
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <cstdio>

const int NMAX = 2000000/2/8 + 5;
unsigned char V[NMAX];

int ciur(int N)
{
	int count;
	int i, j;

	count = 1;
	for (i = 1; ((i * i) << 1) + (i << 1) <= N; ++i)
		if ((V[i >> 3] & (1 << (i & 7))) == 0) {
			for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= N;
			     j += (i << 1) + 1)
				V[j >> 3] |= (1 << (j & 7));
		}

	for (i = 1; (i << 1) + 1 <= N; ++i)
		if ((V[i >> 3] & (1 << (i & 7))) == 0)
			++count;

	return count;
}


int main()
{
	freopen("ciur.in", "r", stdin);
	freopen("ciur.out", "w", stdout);

	int N;

	scanf("%d", &N);
	printf("%d\n", ciur(N));

	return 0;
}