Cod sursa(job #965031)

Utilizator sorin2kSorin Nutu sorin2k Data 22 iunie 2013 23:48:10
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<fstream>
using namespace std;

char prim[2000001];

int main()
{
	ifstream fin("ciur.in");
	ofstream fout("ciur.out");
	int n, i, j, nr;
	fin >> n;
	nr = 0;
	memset(prim, 1, 2000001);
	// parcurgem doar pana la radical pentru ca daca exista x > sqrt(n) a.i. x * y <= n, 
	// sigur y < sqrt(n) => a fost deja marcat cand s-a trecut prin y
	for(i = 3; i*i <= n; i += 2)
	{
		if(prim[i] != 0)
		{
			// plecam de la i * i pentru ca toti multiplii lui i pana in i*i au fost marcati in parcurgerile anterioare
			for(j = i * i; j <= n; j += i)
				prim[j] = 0;
		}
	}
	nr = 1; // nr. 2 e prim
	for(i = 3; i <= n; i += 2)
		if(prim[i] == 1)
			nr++;
	fout << nr;
	return 0;
}