Cod sursa(job #2515337)

Utilizator JADariusinatorJipa Darius Andrei JADariusinator Data 28 decembrie 2019 13:20:20
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <math.h>
#define NMAX 2000003
using namespace std;

bool ciur[NMAX];

bool isPrime(long x)
{
    if(x<2)
        return false;
    if(x==2)
        return true;
    if(x%2==0)
        return false;
    long root=sqrt(x);
    for(long i=3;i<=root;i=i+2)
        if(x%i==0)
        return false;
    return true;
}

void eras(long n)
{
    ciur[0]=false;
    ciur[1]=false;
    ciur[2]=true;
    for(long i=4;i<=n;i=i+2)
        ciur[i]=false;
    for(long i=3;i<=n;i=i+2)
    {
        if(isPrime(i))
        {
            ciur[i]=true;
            for(long k=i*i;k<=n;k=k*i)
            ciur[k]=false;
        }
    }
}

int main()
{
    long n;
    cin>>n;
    eras(n);
    long ct=1;
    for(long i=3;i<=n;i=i+2)
        if(ciur[i])
        ct++;
    cout<<ct;
    return 0;
}