Cod sursa(job #1577644)

Utilizator danudaiaBiro Alexandru danudaia Data 23 ianuarie 2016 17:24:46
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <algorithm>
#include <stdio.h>
#define DIM 2000002

// Dandu-se un numar natural N, sa se determine numarul numerelor prime mai mici sau egale cu N.

using namespace std;

bool ciur[DIM] ;

int main() {
	freopen ("ciur.in","r",stdin) ;
	freopen ("ciur.out","w",stdout) ;
	
	int n;
	scanf ("%d" , &n) ;
	
	ciur[1]=1 ;
	
	for (int i=3; i<=DIM ; ++i) {
		if (!ciur[i]) {
			for (int j=i*3;j<=DIM;j+=2*i) // mergea cu i*i dar cum DIM = 2mil i*i depaseste int 
				ciur[j]=1;
		}
		++i;
		ciur[i]=1 ; //marchez numerele pare ca fiind neprime
	}
	
	int s=0 ; 
	
	for (int i=1;i<=n;++i) {
		s+= ciur[i]^1 ;
	}
	
	printf ("%d" , s) ;
	
	return 0;
}