Cod sursa(job #764156)

Utilizator vitaleamaldur vitalik vitalea Data 4 iulie 2012 12:01:35
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <vector>


int ciur( int n )
{
    std::vector< std::pair<int, int> > l;
    int r = n - 1;

    for( int i = 2; i <= n; i++ )
    {
        l.push_back( std::pair<int, int> ( i, 0 ) );
    }

    for( int i = 0; i < l.size(); i++ )
    {
        if( l[i].second == 0 )
        {
            int p = l[i].first;

            for( int j = i + p; j < l.size(); j += p )
            {
                if( l[j].second == 0 )
                {
                    l[j].second = 1;
                    r--;
                }
            }
        }
    }

    return r;
}

int main()
{
    std::ifstream in ( "ciur.in" );
    std::ofstream out ( "ciur.out" );
    int n;
    in >> n;
    out << ciur( n );
    in.close();
    out.close();
    return 0;
}