Cod sursa(job #145015)

Utilizator MarquiseMarquise Marquise Data 28 februarie 2008 11:35:55
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>

#define NMAX 250001
#define PMAX 150000

int n, num, p[PMAX];
char s[NMAX];


void ciur()
{
	int i, j;
	for ( i = 3; i <= n; i++)
		if ( !( s[ i >> 3] & (1 << (i & 7) ) ) )
			for ( j = 2; j * i <= n; j++)
				s[ ( i * j) >> 3] |= 1 << ( ( i * j) & 7);
	num = 1;
	p[1] = 2;
	for ( i = 3; i <= n; i += 2)
		if ( !( s[ i >> 3] & (1 << (i & 7) ) ) )
			p[++num] = i;
}


int main()
{
	int i;
	freopen("ciur.in", "r", stdin);
	freopen("ciur.out", "w", stdout);
	scanf("%d", &n);
	ciur();

	printf("%d\n", num);

	if ( num <= 1000)
		for ( i = 1; i <= num; i++)
			printf("%d ", p[i]);
	else
		for ( i = num - 1000 - 1; i <= num; i++)
			printf("%d ", p[i]);
	return 0;
}