Mai intai trebuie sa te autentifici.
Cod sursa(job #1283025)
Utilizator | Data | 4 decembrie 2014 23:22:56 | |
---|---|---|---|
Problema | Ciurul lui Eratosthenes | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.72 kb |
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 1 << 21;
ifstream fin ("ciur.in");
ofstream fout ("ciur.out");
unsigned char ciur[NMAX];
int main()
{
int n, pr = 0, j, i2;
fin >> n;
for (int i = 3; i <= n; i += 2)
{
//i << 4 si nu 3 pt ca se iau in considerare numai numerele impare
//din cauza asta si i << 1
if (!(ciur[i << 4] & (1 << ((i << 1) & 7))))
{
++pr;
//j = 3 * i si nu 2 * i pt ca se sare peste multipli de 2
for (i2 = i << 1, j = i + i2; j <= n; j += i2)
ciur[j << 4] |= 1 << ((j << 1) & 7);
}
}
fout << pr + 1; //si 2
return 0;
}