Cod sursa(job #1699497)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 7 mai 2016 15:43:18
Problema Ciurul lui Eratosthenes Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 0.82 kb
# include <stdio.h>
# include <stdlib.h>

# define MAX_N 2000001
# define MAX_PRIMES 100000

int low[MAX_N];
int primes[MAX_PRIMES];
int primes_length;

void ciur( int n ) {
    primes_length = 0;

    int i, j;
    for ( i = 2; i <= n; i ++ ) {
        if ( !low[i] ) {
            low[i] = i;

            primes[primes_length] = i;
            primes_length ++;
        }

        for ( j = 0; j < primes_length && primes[j] <= low[i] && primes[j] * i <= n; j ++ )
            low[primes[j] * i] = primes[j];
    }
}

int main() {
    FILE *fin = fopen( "ciur.in", "r" ), *fout = fopen( "ciur.out", "w" );

    int n, i, S;

    fscanf( fin, "%d", &n );

    ciur( n );

    S = 0;
    for ( i = 2; i <= n; i ++ )
        S += ( low[i] == i );

    fprintf( fout, "%d", S );

    fclose( fin );
    fclose( fout );

    return 0;
}