Cod sursa(job #1242772)

Utilizator radudorosRadu Doros radudoros Data 14 octombrie 2014 23:34:17
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <cstring>
using namespace std;
unsigned char a[256];

ifstream fin("ciur.in");
ofstream fout("ciur.out");

int main()
{
	int n;
	unsigned char v[1000000];
	fin >> n;
	for (int i = 0; i <= n >> 3; i++)
	{
		memset(v, 0, 256);
	}
	int nr = 0;
	if (n >= 2)
	{
		/*fout << "2 "*/
 		nr++;
	}

	for (int i = 1; (i << 1) + 1 <= n; i++)
	{
		if (!(v[i >> 3] & (1 << 7 - (i & 7))))
		{
			nr++;
			for (int j = (i << 1) + i + 1; (j << 1) + 1 <= n; j += (i << 1) + 1)
			{
				v[j >> 3] = v[j >> 3]|(1 << 7 - (j & 7));
			}
		}
	}
	
/*	for (int i = 1; ((i<<1)+1)<= n; i++)
	{
		if (!(v[i >> 3] & (1 << 7 - (i & 7))))
			fout << (i<<1)+1 << ' ';
	}
	
	fout << '\n';*/
	fout << nr;
	fout << '\n';
}