Cod sursa(job #2746924)

Utilizator AxicaVirtosu Alexandra Mihaela Axica Data 28 aprilie 2021 18:06:44
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#define NMAX 2000000
using namespace std;
ifstream fin ("ciur.in");
ofstream fout ("ciur.out");
int n, nrprime;
bool v[NMAX+2];
int main()
{
    fin>>n;
    nrprime=1;///l-am numarat pe 2
    for(int i=3; i<=n; i+=2)///sar peste cele pare pt ca e clar ca nu sunt prime
    {
        if(v[i]==0)
        {
            nrprime++;
            if(1ll*i*i<=n) ///i*i poate trece de tipul int si il inmultesc cu 1ll ca sa de long long
            {
                ///voi face ca la ciur, pt nr<=sqrt(n) le voi bifa multiplii ca nr compuse pana la n
                for(int j=i*i; j<=n; j+=2*i)///j nu are nevoie de tip long long, pt ca e verificata i*i<=n si n=int
                {
                    ///j=i*i deoarece toti multiplii lui i(2*i, 3*i, ...i*(i-1)) au fost deja bifati pt nr prime mai mici ca i
                    ///pasul este 2*i, deoarece  daca ar fi i(j=i*i=impar si i=imap as lua in considerare si nr pare, cu j=2*i
                    ///  iau multiplii lui i impari
                    v[j]=1;
                }
            }
        }
    }
    fout<<nrprime;






    return 0;
}