Cod sursa(job #147135)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 2 martie 2008 17:04:35
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#include <cstring>

char *P;
long Prime[1000], k;
bool ok = false;

long ciur(long n) {
	P = new char[n+10];
	memset(P, 0, sizeof(char)*(n+10));
	long i, j, nr=0;

	for (i=1; 2*i+1<n; ++i)
		if ( P[i]==0 ) 
			for (j=3*i+1; 2*j+1<=n; j+=2*i+1)
				P[j]=1;
	nr = 1; Prime[0] = 2;k=1;
	for (i=1; 2*i+1<=n; ++i)
		if ( P[i]==0 ) {
			++nr;
			Prime[k++] = 2*i+1;
			if ( k==1000 ) 
				ok++, k=0;
		}
	return nr;
}



int main() {

	long n;
	fscanf(fopen("ciur.in", "r"), "%ld",&n);

	freopen("ciur.out", "w", stdout);
	printf("%ld\n", ciur(n));
	if ( ok ) {
		for (long i=k+1; i<=999; i++)
			printf("%ld ", Prime[i]);
		for (long i=0; i<=k; ++i)
			printf("%ld ", Prime[i]);
	} else {
		for (long i=0; i<k; ++i)
			printf("%ld ", Prime[i]);
	}
	printf("\n");
	return 0;
}