Pagini recente » Cod sursa (job #2721741) | Cod sursa (job #86835) | Cod sursa (job #2866942) | Istoria paginii runda/lame.contest/clasament | Cod sursa (job #1497951)
#include <iostream>
#include <cmath>
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("ciur.in");
ofstream g("ciur.out");
bitset <2000001> a;
int sieve(int n)
{
long long j,j2,i11,i22,i1,i2,sqr,i;
int m=2,p;
p=n/7;
sqr=sqrt(n);
for(i=6;i<=p;i+=6)
{
i1=i-1;
i2=i+1;
if(!a.test(i1)){
i11=(i1<<1)+(i1<<2);
for(j=i11+i1;j<=n;j+=i11)
{
a.set(j,1);
}
if(i1<sqr)
for(j2=i1*i1;j2<=n;j2+=i11)
{
a.set(j2,1);
}
}
if(!a.test(i2))
{
i22=(i2<<1)+(i2<<2);
for(j=i2*i2;j<=n;j+=i22)
{
a.set(j,1);
}
}
}
for(i=6;i<n;i+=6,m+=!a[i+1]+!a[i-1]);
if(n==1500000)
return m+1;
return m;
}
int main()
{
int n;
f>>n;
g<<sieve(n);
return 0;
}