Pagini recente » Cod sursa (job #983558) | Cod sursa (job #2230701) | Cod sursa (job #1449670) | Cod sursa (job #893446) | Cod sursa (job #878066)
Cod sursa(job #878066)
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
//Ciurul se va face pe biti
bitset <2000005> v;
int main()
{
//Deschiderea fisierelor de intrare si ieisre
ifstream fin("ciur.in");
ofstream fout("ciur.out");
//Numarul pana la care cautam numerele prime
int n;
//i,j - contoare si nr - numarul de numere prime gasite (este initial 1 caci 2 este singurul numar prim si par)
int i,j,nr=1;
//Se citeste n
fin>>n;
//Limita superioara a parcurgerii pentru marcarea multiplilor
int limita=sqrt(n);
//Se marcheaza numerele pare
for(i=4;i<=n;i+=2)
v[i]=1;
//Se aplica algoritmul Ciurului lui Eratostenes
for(i=3;i<=limita;i+=2)
if(v[i]==0)
{
nr++;
for(j=i*i;j<=n;j+=i)
v[j]=1;
}
//Pentru restul de numere nu mai marcam multiplii dar crestem numarul de numere prime
for(;i<=n;i+=2)
if(v[i]==0)
nr++;
//Se afiseaza raspunsul
fout<<nr<<'\n';
//Inchiderea fisierelor de intrare si iesire
fin.close();
fout.close();
return 0;
}