Cod sursa(job #2885173)

Utilizator NanuGrancea Alexandru Nanu Data 5 aprilie 2022 16:48:05
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("ciur.in");
ofstream fout("ciur.out");

#define DIM 2000000

int n;
bool ciur[DIM + 1];

//0 = prim
//1 = neprim;
static inline void Eratostene(int n) {
  ciur[0] = ciur[1] = 1;
  for(int i = 4; i <= n; i += 2)
    ciur[i] = 1;    //numerele pare nu sunt prime;

  for(int i = 3; i * i <= n; i += 2)
    if(!ciur[i])  //daca e prim ii marchez toti multiplii;
      for(int j = i * i; j <= n; j += i)
        ciur[j] = 1;
}

int main() {
  fin >> n;

  Eratostene(n);

  int nrprime = 0;
  for(int i = 2; i <= n; i++)
    nrprime += (ciur[i] == 0);
  fout << nrprime;

  return 0;
}