Cod sursa(job #1951564)

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

const int NMAX  = 2000005;

int n;
bool is_prime[NMAX];
int primes[1420];
int primes_size;
int 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(int i=2; i<n;i++)
        is_prime[i] = 1;

    for (int i=2; i<n; i++)
    {
        if(is_prime[i])
        {
            primes[primes_size++] = i;
            SPF[i] = i;
        }
        for (int 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;
}