Pagini recente » Monitorul de evaluare | Cod sursa (job #936666)
Cod sursa(job #936666)
#include <vector>
#include <cstdlib>
#include <fstream>
using namespace std;
const int NMAX = (1000000 >> 4) | 1;
char isNPrime[NMAX];
int main()
{
int N, M, i, j, count, countPrime;
ifstream in("ciur.in");
ofstream out("ciur.out");
in >> N >> M;
for(i = 1; ((i * i) << 1) + (i << 1) < N; ++i)
{
if((isNPrime[i >> 3] & (1 << (i & 7)))) continue;
count = (i << 1) | 1;
for(j = ((i * i) << 1) + (i << 1); (j << 1) < N; j += count )
isNPrime[j >> 3] |= 1 << (j & 7);
}
countPrime = 1;
for(i = 3, j = 1; i <= N; i += 2, ++j)
{
if((isNPrime[j >> 3] & (1 << (j & 7)))) continue;
++countPrime;
}
out << countPrime << '\n';
return EXIT_SUCCESS;
}