Pagini recente » Cod sursa (job #2191343) | Cod sursa (job #2470678) | Cod sursa (job #83724) | Cod sursa (job #470150) | Cod sursa (job #1761871)
#include <fstream>
class Sieve
{
int mSize;
bool* pSieve;
public:
Sieve(int max_value)
{
mSize = max_value + 1;
pSieve = new bool[mSize];
for (int i = 0; i < mSize; ++i) pSieve[i] = true;
pSieve[0] = false;
pSieve[1] = false;
for (int i = 2; i*i <= max_value; ++i) {
if (pSieve[i]) {
for (int j = i*i; j <= max_value; j += i) pSieve[j] = false;
}
}
}
~Sieve()
{
mSize = 0;
delete[] pSieve;
}
bool isPrime(int x)
{
if (0 <= x && x < mSize) return pSieve[x];
}
int countPrimesUpTo(int x)
{
if (x >= mSize) return -1;
if (x <= 1) return 0;
int n_primes = 1;
for (int i = 3; i <= x; i += 2) {
if(pSieve[i]) ++n_primes;
}
return n_primes;
}
};
int main()
{
std::ifstream input("ciur.in");
std::ofstream output("ciur.out");
int n;
input >> n;
Sieve sieve(n);
output << sieve.countPrimesUpTo(n) << '\n';
}