Pagini recente » Cod sursa (job #2091014) | Cod sursa (job #2692720) | Istoria paginii runda/simulare_oji_2016/clasament | Cod sursa (job #1326079) | Cod sursa (job #1042802)
#include<stdio.h>
#define EratostenesMaxN 2000000
class Eratostenes{
int nrPrimes;
unsigned char v[((EratostenesMaxN>>4)+1)];
public:
Eratostenes(int n) : nrPrimes((n+1)/2){
int i,j;
for(i=3;i*i<=n;i+=2){
if(v[i>>4]&(1<<((i>>1)&7)))
continue;
for(j=i*3;j<=n;j+=i+i){
if(!(v[j>>4]&(1<<((j>>1)&7))))
nrPrimes--;
v[j>>4]|=(1<<((j>>1)&7));
}
}
nrPrimes=nrPrimes;
}
int getNrPrimes(){
return nrPrimes;
}
};
int main(){
int n;
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);
scanf("%d",&n);
Eratostenes ciur(n);
printf("%d",ciur.getNrPrimes());
return 0;
}