Cod sursa(job #281275)

Utilizator tomescu_alinTomescu Alin tomescu_alin Data 13 martie 2009 23:50:54
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

typedef unsigned long ulong;
typedef unsigned int uint;

namespace Prime {

	bool Check(ulong prime) {
		for(int i = 2; i*i <= prime; i++) {
			if(prime%i == 0)
				return false;
		}
		
		return true;
	}
	
	namespace Eratosthenes {
	
		ulong GetCount(ulong n) {
			bool isPrime[n+1];
			ulong totalPrimes = n - 1;
		    
			for(uint i = 1; i < n+1; i++) {
				isPrime[i] = true;
			}
		    
			ulong i, j;
			for (i = 2; i*i <= n; i++) {
				if (isPrime[i]) {
					j = 2;
					while (i*j <= n) {
						ulong multiple = i*j;
						
						if(isPrime[multiple])
							totalPrimes--;
						
						isPrime[multiple] = 0;
						j++;				  
		            }
		        }
		    }
			
			return totalPrimes;
		}
		
	}
}

int main()
{
	const char * inFile = "ciur.in";
	const char * outFile = "ciur.out";

	ifstream fin(inFile);
	ofstream fout(outFile);
	
	ulong n, totalPrimes;

	fin >> n;
	
	totalPrimes = Prime::Eratosthenes::GetCount(n);
	
	fout << totalPrimes << endl;
	
	fout.close();
	fin.close();
	
	return 0;
}