Pagini recente » Cod sursa (job #1393432) | Cod sursa (job #1639701) | Cod sursa (job #1962937) | Cod sursa (job #1729573) | Cod sursa (job #2746924)
#include <fstream>
#define NMAX 2000000
using namespace std;
ifstream fin ("ciur.in");
ofstream fout ("ciur.out");
int n, nrprime;
bool v[NMAX+2];
int main()
{
fin>>n;
nrprime=1;///l-am numarat pe 2
for(int i=3; i<=n; i+=2)///sar peste cele pare pt ca e clar ca nu sunt prime
{
if(v[i]==0)
{
nrprime++;
if(1ll*i*i<=n) ///i*i poate trece de tipul int si il inmultesc cu 1ll ca sa de long long
{
///voi face ca la ciur, pt nr<=sqrt(n) le voi bifa multiplii ca nr compuse pana la n
for(int j=i*i; j<=n; j+=2*i)///j nu are nevoie de tip long long, pt ca e verificata i*i<=n si n=int
{
///j=i*i deoarece toti multiplii lui i(2*i, 3*i, ...i*(i-1)) au fost deja bifati pt nr prime mai mici ca i
///pasul este 2*i, deoarece daca ar fi i(j=i*i=impar si i=imap as lua in considerare si nr pare, cu j=2*i
/// iau multiplii lui i impari
v[j]=1;
}
}
}
}
fout<<nrprime;
return 0;
}