Cod sursa(job #2972404)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 29 ianuarie 2023 14:01:12
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#include <memory>
#include <vector>
#include <bitset>

using namespace std;

class Solver{
private:
  static const int Nmax = 2000013;
  bitset<Nmax> used;
  int numberPrimes, N;
public:
  Solver() {
    freopen("ciur.in", "r", stdin);
    freopen("ciur.out", "w", stdout);
  }
  ~Solver() {
    fclose(stdin);
    fclose(stdout);
  }
  void ReadData() {
    scanf("%d", &N);
  }
  void ComputeSieve()
  {
    numberPrimes = 1; // 2;
    for (int i = 1; (2*i + 1) <= N; ++i)
      if (used[2*i + 1] == false) {
	used[2*i + 1] = true;
	++numberPrimes;
	for (int j = 1; (2 * i + 1) * (2 * j + 1) <= N; ++j)
	  used[(2 * i + 1) * (2 * j + 1)] = true;
      }
    printf("%d\n", numberPrimes);
  }
  
};

int main() {
  unique_ptr<Solver> s = make_unique<Solver>();
  s->ReadData();
  s->ComputeSieve();
  return 0;
}