Pagini recente » Cod sursa (job #1623016) | Cod sursa (job #2458739) | Cod sursa (job #883415) | Cod sursa (job #1161589) | Cod sursa (job #3237543)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("ciur.in");
ofstream fout("ciur.out");
int cnt_sieve(int n)
{
int cnt = n / 2;
bool is_prime[n / 2]; // ignore even numbers
fill(is_prime, is_prime + n / 2, true);
for (int i = 3; i <= n; i += 2)
{
int bit_idx = i / 2;
if (is_prime[bit_idx])
{
for (int j = 3; j * i <= n; j += 2)
{
int mult_bit_idx = (i * j) / 2;
if (is_prime[mult_bit_idx])
{
is_prime[mult_bit_idx] = false;
--cnt;
}
}
}
}
return cnt + 1;
}
int main()
{
int n;
fin >> n;
fout << cnt_sieve(n);
return 0;
}