Cod sursa(job #146705)

Utilizator ProtomanAndrei Purice Protoman Data 2 martie 2008 00:07:46
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
#define mx 1000010
long i,j,n;
long v[1010];
char p[mx];

void ciur(int max)
{
	long i;
	for (i=1; i*i*2+2*i<=max; i++)
	{
		j=i*i*2+2*i;
		while (2*j+1<=max)
		{
			p[j]=1;
			j=j+2*i+1;
		}
	}
	for (i=(max-1)/2; i>0; i--)
		if (p[i]==0)
		{
			v[0]++;
			if (v[0]<=1000)
				v[v[0]]=2*i+1;
		}
	if (v[0]<1000)
		v[v[0]+1]=2;
	v[0]++;
}

int main()
{
	freopen("ciur.in","r",stdin);
	freopen("ciur.out","w",stdout);
	scanf("%ld",&n);
	ciur(n);
	printf("%ld\n",v[0]);
	if (v[0]>1000)
		j=1000;
	else j=v[0];
	for (i=j; i>0; i--)
		printf("%ld ",v[i]);
	fclose(stdin);
	fclose(stdout);
	return 0;
}