Cod sursa(job #144637)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 27 februarie 2008 20:22:05
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<stdio.h>
#include<string.h>
//#include<timer.h>
#define N 100000
//using namespace std;
char v[N+1];
int n,x;
int vect[N];
/*void ciur1(){
    int i,j;
    memset(v,0,N);
    v[0]=v[1]=1;
    for (i=2;i<=N;++i)
        if (v[i]==0){
           for (j=i+i;j<=N;j+=i)
               v[j]=1;
        }
}
void ciur2(){
    int i,j;
    memset(v,0,N);
    v[0]=1;v[1]=1;
    for (i=4;i<=N;i+=2)
        v[i]=1;
    for (i=3;i<=N;i+=2)
        if (v[i]==0)
           for (j=i+i;j<=N;j+=i)
               v[j]=1;
}*/
void ciur3(){
     int i,j;
     memset(v,0,n);
     v[0]=v[1]=1;vect[1]=2;x=1;
     for (i=4;i<=n;i+=2)
        v[i]=1;
     for (i=3;i<=n;i+=2)
        if (v[i]==0){
           ++x;vect[x]=i;
           for (j=i*i;j<=n;j+=i)
              v[j]=1;
        }
}
int main(){
    //timer t;
    int i;
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    scanf("%d",&n);
    ciur3();
    if (x<=1000){
       printf("%d\n",x);
       for (i=1;i<=x;++i)
           printf("%d ",vect[i]);
    }
    else{
         printf("%d\n",x);
         for (i=x-999;i<=x;++i)
             printf("%d ",vect[i]);
    }
    return 0;
}