Cod sursa(job #145428)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 28 februarie 2008 20:11:54
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <cstdio>
#include <bitset>

using namespace std;

#define MAXN 2000005
#define MAXP 400000

int N;
bitset<MAXN> u;

int p[MAXP];

int main()
{
	freopen("ciur.in", "rt", stdin);
	freopen("ciur.out", "wt", stdout);

	scanf("%d", &N);
	p[ p[0] = 1 ] = 2;
	int i;
	for (i = 3; i * i <= N; i += 2)
	{
		if (u[i])
			continue;

		p[ ++p[0] ] = i;
		for (int j = i * i; j <= N; j += i)
			u[j] = 1;
	}
	for (; i <= N; i += 2)
		if (!u[i])
			p[ ++p[0] ] = i;

	printf("%d\n", p[0]);
	for (int i = (1 > (p[0] - 999)) ? 1 : (p[0] - 999); i <= p[0]; i++)
		printf("%d ", p[i]);
	printf("\n");

	return 0;
}