Cod sursa(job #2586925)

Utilizator sulzandreiandrei sulzandrei Data 21 martie 2020 19:06:34
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 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=1;
    bitset<2000003> prime;
    prime.flip();

    for(int i = 3; i*i <=n; i+=2 ){
        if (prime[i]==1){
            for(int j = i*i ; j<=n; j+= 2*i){
               prime[j]=0;
            }
        }

    }

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

    return primes;
}

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

    return 0;
}