Cod sursa(job #146243)

Utilizator recviemAlexandru Pana recviem Data 1 martie 2008 14:29:59
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include "stdio.h"

    int n,nr=0,last=0;
    bool ciur[2000001];

void scrie(int x)
{
    if (x>1 && last<1000)
    {
        if (!ciur[x])
        {
            last++;
            scrie(x-1);
            printf("%d ",x);
        }
        else
            scrie(x-1);
    }
}

int main()
{
    freopen("ciur.in","r",stdin);
    scanf("%d",&n);
    fclose(stdin);

    for (int i=1;i<=n;i++)
        ciur[i]=0; // La inceput toate numerele sunt prime

    int nr=0;
    for (int i=2;i<n;++i) // Parcurgem ciurul
    if (!ciur[i]) // Daca numarul este prim ii taiem multiplii
    {
        nr++;
        if (i<n/2) // Nu mai taiem multiplii dupa 1/2 din ciur
        for (int j=i*2;j<=n;j+=i)
            ciur[j]=1;
    }

    freopen("ciur.out","w",stdout);
    printf("%d\n",nr);
    scrie(n);
    fclose(stdout);
    return 0;
}