Cod sursa(job #1001978)

Utilizator florin011Florian Andone florin011 Data 26 septembrie 2013 17:46:06
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
//Ciurului lui Erathostene,complexitate O(n log log n)
#include<fstream>
using namespace std;
#define MAX_N 2000000

fstream f("ciur.in",ios::in); //fisier de intrare
fstream g("ciur.out",ios::out);  //fisier de iesire

int main()
{
    int n,nr=1,i,j;
    bool v[MAX_N];

    f>>n; //citire numarul pana la care aplic algoritmul
    f.close(); //inchidere fisier de intrare

    //v[i]=1 - i prim
    //v[i]=0 - i compus
    for(i=2; i<=n; i++)
        v[i]=1;       //presupun ca toate sunt prime pana la n

    //Optimizare: numerele pare in afara de 2 sunt compuse
    for(i=3; i<=n; i=i+2)
        if(v[i]==1) //daca i este prim
            {
                nr++;
                for(j=i+i; j<=n; j+=i) //fiecare multiplu de i este compus
                    v[j]=0;
            }

    //scriere solutie
    if(n==2)
        g<<"2";
    else
        g<<nr;

    g.close(); //inchidere fisier de iesire

    return 0;
}