Pagini recente » Cod sursa (job #1537929) | Cod sursa (job #46020) | Cod sursa (job #3175447) | Cod sursa (job #2588769) | Cod sursa (job #965031)
Cod sursa(job #965031)
#include<fstream>
using namespace std;
char prim[2000001];
int main()
{
ifstream fin("ciur.in");
ofstream fout("ciur.out");
int n, i, j, nr;
fin >> n;
nr = 0;
memset(prim, 1, 2000001);
// parcurgem doar pana la radical pentru ca daca exista x > sqrt(n) a.i. x * y <= n,
// sigur y < sqrt(n) => a fost deja marcat cand s-a trecut prin y
for(i = 3; i*i <= n; i += 2)
{
if(prim[i] != 0)
{
// plecam de la i * i pentru ca toti multiplii lui i pana in i*i au fost marcati in parcurgerile anterioare
for(j = i * i; j <= n; j += i)
prim[j] = 0;
}
}
nr = 1; // nr. 2 e prim
for(i = 3; i <= n; i += 2)
if(prim[i] == 1)
nr++;
fout << nr;
return 0;
}