Cod sursa(job #631120)

Utilizator dany123Florea Daniel dany123 Data 7 noiembrie 2011 00:41:54
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int n;
char v[250000]; //2.000.000/8
inline int af_bit(char a, int x)
{
	return ((a&(1<<x))!=0);//daca bitul x e 0 --> fals
}
inline void set_bit(char &a, int x)
{
	if (af_bit(a,x)==0) a=(a^(1<<x));
}
int main ()
{
	ifstream fin("ciur.in");
	ofstream fout("ciur.out");
	fin>>n;
	int nr=1;//2-ul
	for (int i=3;i<=n;i+=2)
	{
		if (af_bit(v[i/8],i%8)==0)
		{
			nr++;
			for (int j=i+i;j<=n;j+=i)
				set_bit(v[j/8],j%8);
		}
	}
	fout<<nr;
	
	fin.close();
	fout.close();
	return 0;
}