Cod sursa(job #1454612)
| Utilizator | Data | 27 iunie 2015 02:07:08 | |
|---|---|---|---|
| Problema | Ciurul lui Eratosthenes | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.62 kb |
#include <fstream>
#include <math.h>
using namespace std;
unsigned ciur[2000005>>6];
#define isComposite(n) (ciur[n>>6]&(1<<((n>>1)&31)))
#define makeComposite(n) (ciur[n>>6] |= (1<<((n>>1)&31)))
int main()
{
int n,crossn,i,j,k,c;
ifstream f("ciur.in");
ofstream g("ciur.out");
f>>n;
crossn = sqrt(n);
c = 1;
for(i=3;i<=crossn;i=i+2){
if(!isComposite(i)){
for(j=i*i,k=i<<1;j<=n;j=j+k){
makeComposite(j);
}
}
}
for(i=3;i<=n;i=i+2){
if(!isComposite(i)){
c++;
}
}
g<<c;
}
