Cod sursa(job #144543)

Utilizator DastasIonescu Vlad Dastas Data 27 februarie 2008 19:15:27
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>

const int maxn = 2000001;

FILE *in = fopen("ciur.in","r"), *out = fopen("ciur.out","w");

int n;
char x[maxn]; // x[i] = 1 daca i nu e prim
int sol[1001];

int main()
{
    fscanf(in, "%d", &n);


    for ( int i = 4; i <= n; i += 2 )
        x[i] = 1;

    int cnt = 0;
    for ( int i = 3; i*i <= n; i += 2 )
        if ( !x[i] )
            for ( int j = i*i; j <= n; j += i )
                x[j] = 1;


    int nrp = 0;
    for ( int i = n; i > 1; --i )
        if ( !x[i] )
        {
            ++cnt;

            if ( nrp < 1000 )
                sol[++nrp] = i;
        }
    fprintf(out, "%d\n", cnt);

    for ( int i = nrp; i; --i )
        fprintf(out, "%d ", sol[i]);
    fprintf(out, "\n");

	return 0;
}