Cod sursa(job #281258)

Utilizator tomescu_alinTomescu Alin tomescu_alin Data 13 martie 2009 23:19:30
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 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;
	}
}

int main()
{
	uint totalPrimes = 0;
	ulong n;

	cout << "Enter the limit: ";
	cin >> n;
	
	bool isPrime[n+1];
	totalPrimes = n - 1; //	(1 is not prime)
    
	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++;				  
            }
        }
    }
	
    //uint check = 0, real = 0;
	//for (i = 2; i <= n; i++) {
	//	if (isPrime[i]) {
			//cout << i << " ";
	//		check++;
			//if(Prime::Check(i)) real++;
	//	}		
	//}
	
	
	ofstream fout("ciur.out");
	fout << totalPrimes << endl;
	//cout << endl << totalPrimes << " vs " << check << " vs " << real;
	fout.close();
	
	return 0;
}