Pagini recente » Cod sursa (job #274496) | Cod sursa (job #1941658) | Cod sursa (job #941013) | Cod sursa (job #2912626) | Cod sursa (job #1170186)
// CIURUL LUI ATKIN
// O(n/loglog(n))
#include <cstdio>
#include <cmath>
using namespace std;
static const int NMAX=2000000;
bool v[NMAX]={};
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(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])
{
//printf("%d\n",i);
++nrprime;
}
}
return nrprime;
}