Cod sursa(job #145238)

Utilizator raduzerRadu Zernoveanu raduzer Data 28 februarie 2008 17:07:03
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <stdio.h>

int n,a[2000100],nr,x,z;

int main()
{
	freopen("ciur.in","r",stdin);
	freopen("ciur.out","w",stdout);
	scanf("%d",&n);
	int i;
	for (i=2; i<=n; ++i)
	{
		if (a[i]==0)
		{
			++nr;
			x=i;
			while (x+i<=n)
			{
				x+=i;
				a[x]=1;
			}
		}
	}
	printf("%d\n",nr);
	if (nr>1000) 
	{
		z=1000;
		int b[1010];
		for (i=n; i>0; --i)
		{
			if (a[i]==0)
			{
				b[z]=i;
				--z;
			}
		}
		for (i=1; i<=1000; ++i) printf("%d ",b[i]);
	}
	if (nr<=1000) 
	{
		for (i=2; i<=n; ++i) 
			if (a[i]==0) printf("%d ",i);
	}
	return 0;
}