Cod sursa(job #2509436)

Utilizator eltorroxGeorge Anescu eltorrox Data 14 decembrie 2019 11:02:33
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>

using namespace std;

ifstream cin("ciur.in");
ofstream cout("ciur.out");

unsigned char c[250001];

inline void setbit(int i)
{
	int i1 = i >> 3;
	int r1 = i & 7;
	c[i1] |= (1 << r1);
}

inline bool getbit(int i)
{
	int i1 = i >> 3;
	int r1 = i & 7;
	return ((c[i1] & (1 << r1)) != 0);
}

void ciur(int n)
{
	int i, j;
	setbit(0);
	setbit(1);
	for (i = 2; i <= n; i++)
	{
		if (!getbit(i))
		{
			for (j = i * i; j <= n; j += i)
			{
				setbit(j);
			}
		}
	}
}

int main()
{
	int n, i, cnt = 0;
	cin >> n;
	ciur(n);
	for (i = 1; i <= n; i++)
	{
		if (!getbit(i))
			cnt++;
	}
	cout << cnt << endl;
	return 0;
}