Pagini recente » Cod sursa (job #2256279) | Cod sursa (job #619084) | Cod sursa (job #2100684) | Cod sursa (job #2457395) | Cod sursa (job #606638)
Cod sursa(job #606638)
#include <fstream>
#include <cmath>
using namespace std;
long int v[2100000],i,n,x,s,nr;
bool prim(int nr)
{
bool ok;
int i,x;
ok=true;
x=trunc(sqrt(nr));
for (i=2;i<=x;i++) {
if (nr%i==0) ok=false;
if (ok==false) break;
}
return(ok);
}
int main()
{
ifstream f("ciur.in");
ofstream g("ciur.out");
f>>n;
x=2;
while (x<n) {
x=x+2;
v[x]=1;
}
x=3;
while (x*x<=n) {
if (prim(x)) {
s=x;
while (s<n) {
s=s+x*2;
v[s]=1;
}
}
x=x+2;
}
nr=0;
for (i=2;i<=n;i++)
if (v[i]==0) nr++;
g<<nr;
f.close();
g.close();
return 0;
}
//luam un vector cu toate valorile 0
//il luam pe 2 si punem 1 la toti multiplii lui mai mici ca n;
//luam toate numerele prime <=radical din n si punem 1 la toti multiplii lor impari,la cei pari e deja 1;
//numaram cati de 0 au mai ramas in vector de la 2 la n si ala e rezultatul