Cod sursa(job #1951552)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 3 aprilie 2017 18:16:00
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

const int NMAX  = 2000005;

typedef long long LL;

int n;
bool is_prime[NMAX];
LL primes[NMAX/2];
int primes_size;
LL SPF[NMAX];

int main()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    scanf("%d",&n);

    is_prime[0] = is_prime[1] = 0;
    for(LL i=2; i<n;i++)
        is_prime[i] = 1;

    for (LL i=2; i<n; i++)
    {
        if(is_prime[i])
        {
            primes[primes_size++] = i;
            SPF[i] = i;
        }
        for (LL j=0;j < primes_size && i*primes[j] < n && primes[j] <= SPF[i];j++)
        {
            is_prime[i*primes[j]] = 0;
            SPF[i*primes[j]] = primes[j] ;
        }
    }
    printf("%d\n",primes_size);

    return 0;
}