Cod sursa(job #249901)

Utilizator haidesportulRazvan Ionescu haidesportul Data 29 ianuarie 2009 15:02:29
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
/*SIEVE.CPP-ciurul lui Eratostene. Gaseste toate numerele prime pana la un n 
 *citit de la tastatura.
 */
#include<iostream>
#include<fstream>
#include<vector>
//#include<conio.h>
using namespace std;

void sieve(vector<bool> &nums, long long n)
{
    nums.reserve(n);
    nums.push_back(0);
    for(long long i=1; i<n; i++) nums.push_back(1);
    long long curr_prime=1;
    while((curr_prime+1)*(curr_prime+1)-1<(n+1))
    {
        for(long long i=(curr_prime+1)*(curr_prime+1)-1; i<n; i+=(curr_prime+1)) 
            //if((i+1)%(curr_prime+1)==0)
                nums[i]=0;
        do
        {
            curr_prime++;
        }
        while(!nums[curr_prime]);
    }
}

int main(int argc, char** argv)
{
    long long n;
    ifstream in("ciur.in");
    in>>n;
    vector<bool> v;
    sieve(v, n);
    int cate=0;
    for(int i=0; i<n; i++)
    	if(v[i])
    		cate++;
    ofstream out("ciur.out");
    out<<cate;
    //getch();
}