Cod sursa(job #145841)

Utilizator oumbraPaul Filimoon oumbra Data 29 februarie 2008 16:17:53
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>

char A[2000000];


int main()
{
	freopen("ciur.in", "r", stdin);
	freopen("ciur.out", "w", stdout);

	int n;

	scanf("%d", &n);

	int i, f;
	int p = 2;
	
	for(i=2; i<=n; i++)
		A[i] = 1;

	for(p = 2; p < n/2; p++)
	{
		if(A[p])
		{
			f = 1;
			for(i = 2; f < n; i++)
			{
				f = i*p;
				A[f] = 0;
			}
	
		}
	}
/*
	for(i = 0; i <= n; i++)
	{
		if(A[i])
		{
			printf("%d ", i);
		}
	}
*/

	f = 1000;

	int lasti = 0;
	int cnt = 0;
	int cnt2 = 0;

	A[1] = 0;

	for(i = n; i > 0  && f; i--)
	{
		if(A[i])
		{
			f--;
			lasti = i;
			cnt++;
		}
	}

	for(i = 2; i <= n; i++)
	{
		if(A[i])
			cnt2++;	
	}

	printf("%d\n", cnt2);

	for(i = lasti; i <= n; i++)
	{
		if(A[i])
		{
			printf("%d ", i);
		}
	}

	

	return 0;
}