Cod sursa(job #1209428)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 17 iulie 2014 17:40:24
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>
#include <math.h>

#define PRIME 0
#define COMPOSITE 1

char a[2091152];

void sieve(int n)
{
    int i, j;
    int square_root_n = sqrt(n);
    for (i = 2; i <= square_root_n; ++i)
    {
        if (a[i] == PRIME)
        {
        
            for (j = i * i; j <= n; j += i)
            {
                a[j] = COMPOSITE;
            }        
        }
    }
}

int count_prime_numbers(int n) 
{
    int i, primes = 1;
    for (i = 3; i <= n; i += 2)
    {
        if (a[i] == PRIME)
        {
            ++primes;
        }
    }
    
    return primes;
}

int main()
{
    int i, j, N;
    freopen("ciur.in", "r", stdin);
    freopen("ciur.out", "w", stdout);
    
    scanf("%d", &N);
    
    sieve(N);
    printf("%d", count_prime_numbers(N));
    
    return 0;
}