Cod sursa(job #149665)

Utilizator corina23Ciobanu Corina corina23 Data 5 martie 2008 22:57:18
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream.h>
ifstream f("ciur.in");
ofstream g("ciur.out");
char prim[1000005];
long long n,p;
//long long prost[1001];

int main()
{f>>n;
 int j,i=1,prostie;
 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';
 //int k=0;
 if(nr<=1000)
	{g<<2<<' ';
	 nr--;
	 for(i=1;nr>0;i++)
		if(prim[i]==0) {g<<2*i+1<<' ';nr--;}
	 }
 else {if(n%2==1) i=n/2;
       else i=n/2-1;                 
	   int cnt=1000;
	   while(cnt>0)
		{if(prim[i]==0)
			{cnt--;
			 //prost[++k]=2*i+1;
			 }
		 i--;}
	   while(prim[i]==1) i++;
	   g<<2*i+1<<' ';
	   i++;
	   //prostie=0;
	   cnt=1;
	   for(;cnt<1000;i++)
		 if(prim[i]==0) {g<<2*i+1<<' ';cnt++;}
	   //while(k>0) g<<prost[k--]<<' ';
	  }
 //g<<endl<<prostie;
 f.close();
 g.close();
 return 0;
}