Pagini recente » Cod sursa (job #2801794) | Cod sursa (job #1620722) | Cod sursa (job #2408455) | Cod sursa (job #2419177) | Cod sursa (job #842241)
Cod sursa(job #842241)
#include<cstdio>
#include<bitset>
using namespace std;
const int Nmax = 2000000/2/8+1;
int N, rez;
bitset<Nmax> p;
//(p[i>>3]&(1<<(i&7))) == 0 if 2*i + 1 is prime
int eratostene(int n) {
int i, j, nr = 1;
for(i = 1; ((i * i) << 1) + (i << 1) <= n; i++) {
if(p[i] == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
p[i] = 1;
}
}
}
for(i = 1; 2 * i + 1 <= n; ++i)
if (p[i] == 0)
nr++;
return nr;
}
int main() {
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);
scanf("%d",&N);
rez = eratostene(N);
printf("%d\n",rez);
return 0;
}