Pagini recente » Cod sursa (job #2568298) | Cod sursa (job #3227099) | Cod sursa (job #2274435) | Cod sursa (job #1586333) | Cod sursa (job #1089925)
#include<fstream>
#include<iostream>
#include<vector>
#include<bitset>
using namespace std;
template<unsigned long numbits>
struct PrimeSieve
{
long long num;
bitset<numbits> bits;
void GeneratePrimes(const long long n)
{
num=1;
for(int i=1; ((i<<1)+1)*((i<<1)+1)<n; ++i)
{
if(!bits[i])
{
for(long long j=i; ((i<<1)+1)*((j<<1)+1)<n; ++j)
{
const long long index=((i<<1)+1)*((j<<1)+1);
//cout<<"("<<((i<<1)+1)*((j<<1)+1)<<" "<<(i+j)+1<<")"<<" ";
bits[index>>1]=1;
}
}
}
}
const bitset<numbits>& GetPrimes() const
{
return bits;
}
};
int main()
{
long long n=10,num=1;
fstream fin("ciur.in", fstream::in);
fstream fout("ciur.out", fstream::out);
//fin>>n;
PrimeSieve<16000002> primes;
primes.GeneratePrimes(n);
for(int i=1; (i<<1)+1<n; ++i)
{
if(! (primes.GetPrimes())[i] )
{
num++;
//cout<<(i<<1)+1<<" ";
}
}
cout<<num<<endl;
//cout<<endl<<num<<endl;
fin.close();
fout.close();
return 0;
}