Cod sursa(job #249516)

Utilizator haidesportulRazvan Ionescu haidesportul Data 28 ianuarie 2009 17:40:59
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<iostream>
#include<fstream>
#include<vector>
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++) 
            if((i+1)%(curr_prime+1)==0)
                nums[i]=0;
        do
        {
            curr_prime++;
        }
        while(!nums[curr_prime]);
    }
}

int main(int argc, char** argv)
{
    ifstream in("ciur.in");
    long long n;
    in>>n;
    in.close();
    vector<bool> v;
    sieve(v, n);
    ofstream out("ciur.out");
    vector<bool>::size_type cate=v.size();
    out<<cate;
    out.close();
}