Cod sursa(job #144744)

Utilizator floringh06Florin Ghesu floringh06 Data 27 februarie 2008 21:55:54
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

#define FIN "ciur.in"
#define FOUT "ciur.out"
#define MAX_V 2000005

unsigned char C[MAX_V];

int A[150000];

int N, Pr;

    void solve ()
    {
         int rd = (int) sqrt (N);
         
         for (int i = 2; i <= rd; ++i)
         {
             int j = i*i;
             while (j <= N)
             {
                   C[j] = 1;
                   j+=i;
             }
         }
         for (int i = 2; i <= N; ++i)
             if (C[i] != 1) A[++Pr] = i;
    }

    int main ()
    {
        freopen (FIN, "r", stdin);
        freopen (FOUT, "w", stdout);

        scanf ("%d", &N);
        
        solve ();
        
        printf ("%d\n", Pr);
        int i;
        if (Pr > 1000)
           for (i = Pr - 999; i <= Pr; ++i) printf ("%d ", A[i]);
        else for (i = 1; i <= Pr; ++i) printf ("%d ", A[i]);
        
        return 0; 
    }