Pagini recente » Cod sursa (job #1666316) | Cod sursa (job #1690358) | Cod sursa (job #742313) | Cod sursa (job #602483) | Cod sursa (job #1170175)
// CIURUL LUI ATKIN
// O(n/loglog(n))
#include <cstdio>
#include <cmath>
#include <bitset>
using namespace std;
static const int NMAX=2000000;
bitset<NMAX> v;
int ciur(int);
int main()
{
FILE *in=fopen("ciur.in","rt"),*out=fopen("ciur.out","wt");
int n;
fscanf(in,"%d",&n);
fprintf(out,"%d",ciur(n));
return 0;
}
int ciur(int limit)
{
int r=ceil((double)sqrt(limit)),a,i,j,nrprime=2;
for(i=1;i<=r;++i)
{
for(j=1;j<=r;++j)
{
a=4*i*i+j*j;
if((a<=limit)&&(a%12==1||a%12==5)) v[a]=true;
a-=(i*i);
if((a<=limit)&&(a%12==7)) v[a]=true;
a-=(2*j*j);
if((i>j)&&(a<=limit)&&(a%12==11)) v[a]=true;
}
}
for(i=5;i<=r;++i)
{
if(v[i])
{
for(j=(a=i*i);j<=limit;j+=a) v[j]=false;
}
}
for(i=5;i<=limit;++i)
{
if(v[i])
{
++nrprime;
}
}
return nrprime;
}