Mai intai trebuie sa te autentifici.
Cod sursa(job #149626)
Utilizator | Data | 5 martie 2008 22:05:44 | |
---|---|---|---|
Problema | Ciurul lui Eratosthenes | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.75 kb |
#include<fstream.h>
ifstream f("ciur.in");
ofstream g("ciur.out");
char prim[1000005];
long long n,p;
int main()
{f>>n;
int j,i=1;
int nr=2;
int prod=(2*i+1)*(2*i+1);
int ceva=2*i+1;
while(prod<n)
{for(j=(prod-1)/2;j<=n/2;j+=ceva)
prim[j]=1;
i++;
while(prim[i]==1) i++;
prod=(2*i+1)*(2*i+1);
ceva=2*i+1;
nr++;
}
for(i=i+1;i<n/2;i++)
if(prim[i]==0) nr++;
g<<nr<<'\n';
if(nr<=1000)
{g<<2<<' ';
for(i=1;i<n/2;i++)
if(prim[i]==0) g<<2*i+1<<' ';
}
else {i=n/2;
int cnt=1000;
while(cnt>0)
{if(prim[i]==0)
cnt--;
i--;}
while(prim[i]==1) i++;
g<<2*i+1<<' ';
i++;
for(;cnt<1000;i++)
if(prim[i]==0) {g<<2*i+1<<' ';cnt++;}
}
f.close();
g.close();
return 0;
}