Cod sursa(job #145150)

Utilizator swift90Ionut Bogdanescu swift90 Data 28 februarie 2008 15:05:51
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<stdio.h>
char nr[2001000];
int main(){
	freopen("ciur.in","r",stdin);
	freopen("ciur.out","w",stdout);
	int n,i,j,sum;
	scanf("%d",&n);
	for(i=4;i<=n;i+=2)
		nr[i]=1;
	for(i=3;i<=n;i+=2){
		if(nr[i]==0){
			for(j=i+i;j<=n;j+=i)
				nr[j]=1;
		}
	}
	sum=1;
	for(i=3;i<=n;i+=2){
		if(nr[i]==0)
			++sum;
	}
	
	printf("%d\n",sum);
	if(sum<1000){
		printf("2");
		for(i=3;i<=n;i+=2)
			if(nr[i]==0)
				printf(" %d",i);
		printf("\n");
	}
	else{
		j=0;
		for(i=n;j<1000;--i){
			if(nr[i]==0)
				++j;
		}
		++i;
		for(;i<=n;i+=2)
			if(nr[i]==0)
				printf("%d ",i);
		printf("\n");
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}