Pagini recente » Cod sursa (job #2235034) | Cod sursa (job #914350) | Cod sursa (job #3184990) | Cod sursa (job #2198859) | Cod sursa (job #1202921)
#include <fstream>
#include <cstring>
#define INFILE "ciur.in"
#define OUTFILE "ciur.out"
using std::ifstream;
using std::ofstream;
using std::memset;
class BitVector
{
public:
BitVector(int n) : data(0), n(n)
{
int bytes = n / 32 + (((n % 32) > 0) ? 1 : 0);
data = new unsigned long[bytes];
memset(data, 0, bytes);
}
~BitVector()
{
delete[] data;
}
bool operator[](int idx) {
if (idx > n)
return false;
return (data[idx / 32] >> (idx % 32)) & 1;
}
void set(int idx)
{
if (idx <= n)
{
data[idx / 32] |= (1 << (idx % 32));
}
}
private:
unsigned long *data;
int n;
};
int main()
{
ifstream fin(INFILE);
ofstream fout(OUTFILE);
int n;
fin >> n;
fin.close();
BitVector v(n);
v.set(0);
v.set(1);
auto res = 0;
for (auto i = 2; i <= n; ++i) {
if (!v[i]) {
++res;
auto x = i * 2;
while (x <= n) {
v.set(x);
x += i;
}
}
}
fout << res;
fout.close();
return 0;
}