Cod sursa(job #145936)

Utilizator moga_florianFlorian MOGA moga_florian Data 29 februarie 2008 19:10:35
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
#include<math.h>

char prim[2000010];
int sol[150024], Nsol=0;
int cate = 0;

int main(){

    FILE *fin = fopen("ciur.in","r"),
         *fout = fopen("ciur.out","w");
         
    int N;
    fscanf(fin,"%d",&N);
    
    int i;
    for(i=2;i<=(int)sqrt((double)N);i++)
        if(!prim[i]){
            cate ++;
            sol[++Nsol] = i;

            for(int j=i; (long long)j*i <= (long long)N; j++)
                prim[i*j] = 1;
        }
        
    for(;i<=N;i++)
        if(prim[i] == 0){
            sol[++Nsol] = i;
            cate ++;
        }
            
    fprintf(fout,"%d\n",cate);
    
    for(int i= (cate-1000+1 < 1)?1:cate-1000+1;i<=cate;i++)
        fprintf(fout,"%d ", sol[i]);
        
    fclose(fin);
    fclose(fout);
    return 0;

}