Cod sursa(job #875696)
| Utilizator | Data | 10 februarie 2013 17:57:05 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.38 kb |
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
int main() {
ifstream fin("ciur.in");
ofstream fout("ciur.out");
int n; fin >> n;
bitset<2000001> sieve;
int sqrt_n=sqrt(n);
for (int i=3,j; i<=sqrt_n; ) {
for (j=i*i; j<=n; j+=(i<<1)) sieve.set(j);
while ((i+=2)<=sqrt_n && sieve[i]);
}
fout << n-n/2-sieve.count();// 1 counted, 2 not counted
return 0;
}
