Cod sursa(job #153421)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 10 martie 2008 15:25:46
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>
#include <cstring>

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

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

	for (i=1; ((i*i+i)<<2)+1<n; ++i)
		if ( P[i]==0 ) 
			for (j=(i*i+i)<<1; (j<<1)+1<=n; j+=(i<<1)+1)
				P[j]=1;
	nr = 1; Prime[0] = 2;k=1;
	for (i=1; (i<<1)+1<=n; ++i)
		if ( P[i]==0 ) {
			++nr;
			Prime[k++] = (i<<1)+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));
	return 0;
	if ( ok ) {
		for (long i=k; 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;
}