Cod sursa(job #1242245)
| Utilizator | Data | 14 octombrie 2014 09:54:06 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.54 kb |
#include <cstdio>
using namespace std;
int n,pm[140000];
inline int ciur()
{
int i,j,nr=0;
for (i=1;((i*i)<<1+(i<<1))<=n;++i)
if (pm[i>>3]&(1<<(i&7))==0)
{
for (j=((i*i)<<1+(i<<1));(j<<1)+1<=n;j+=(i<<n)+1)
pm[j>>3]|=(i<<(j&7));
}
for (i=1;(i<<1)+1<=n;++i)
if ((pm[i>>3]&(1<<(i&7)))==0)
nr++;
return nr;
}
int main()
{
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);
scanf("%d", &n);
printf("%d\n", ciur());
return 0;
}
