Cod sursa(job #629931)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 4 noiembrie 2011 10:51:05
Problema Ciurul lui Eratosthenes Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>

using namespace std;

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

const int N=63000;

unsigned int n,v[N],bit[33];

inline bool viz(int x){
	int a,b;
	a=x/32;
	b=x%32;
	if(v[a]&bit[b])
		return true;
	return false;
}		

inline void marcheaza(int x){
	int a,b;
	a=x/32;
	b=x%32;
	v[a]=v[a]|bit[b];
}


int main(){
	int nrprime=0,i;
	in>>n;
	bit[1]=1<<31;
	for(i=2;i<=32;i++){
		bit[i]=(bit[i-1]>>1);
	}
	int j;
	for(i=2;i*i<=n;++i){
		if(viz(i)==false){
			//nrprime++;
			for(j=i*i;j<=n;j+=i){
				marcheaza(j);
			}
		}
	}
	for(i=2;i<=n;i++){
		if(viz(i)==false)
			nrprime++;
	}
	out<<nrprime;
	return 0;
}