Cod sursa(job #2586862)

Utilizator sulzandreiandrei sulzandrei Data 21 martie 2020 17:39:45
Problema Ciurul lui Eratosthenes Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <utility>
#include <cstring>
#include <bitset>
using namespace std;

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

#define ull long long int
bool isPrime(ull n)
{

    for(int i = 2; i*i <= n; i++)
    {
        if (n%i==0)
        {
            return false;
        }
    }

    return true;
}


ull solvA(ull n)
{
    ull primes= 0;
    for(int i = 2;  i<=n; i++)
    {
        if (isPrime(i))
        {
            primes++;
        }

    }
    return primes;
}


ull sieve(ull n){

    ull primes=0;
    bitset<2000003> prime;
    prime.flip();

    for(int i = 3; i*i <=n; i+=2 ){
        if (prime.test(i)==true){
            for(int j = i*i ; j<=n; j+= i<<1){
               prime.set(j,false);
            }
        }

    }
    if(n%2 ==0) primes++;

    for(int i=3 ;i <=n ; i+=2){
        primes += (prime.test(i)==true)?1:0;
    }

    return primes;
}

int main ( )
{
    ull n,primes=0;
    in>>n;


    out<<sieve(n);

    return 0;
}