Cod sursa(job #168014)

Utilizator sigridMaria Stanciu sigrid Data 30 martie 2008 16:41:15
Problema Sum Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream.h>
#include<math.h>
#define dim 200000

int prim(unsigned long y)
{unsigned long jum;
 jum=sqrt(y);
 unsigned long yy;
 if(y==2) return 1;
 if((y%2)==0) return 0;
 for(yy=3;yy<=jum;yy=yy+2)
  {if((y%yy)==0) return 0;
  }
 return 1;
}

unsigned long v[dim],xx2;
ifstream f("sum.in");
ofstream g("sum.out");
unsigned long x,n,i,j,x2,jj,max,xx,l;


int main()
{

f>>n;

for(i=1;i<=n;i++)
 {f>>x;
  x2=((x*2)*((x*2)+1))/2;
  if(prim(x)) g<<(x2-x-(2*x))<<'\n';
   else
    {xx=x*2;
     for(j=1;j<=xx;j++) v[j]=0;
     jj=x/2;
     if(x%2)
	{for(j=3;j<=jj;j=j+2)
	  if(!v[j])
	    if((prim(j))&&(x%j==0))
	      for(l=j;l<=xx;l=l+j)
		if(!v[l])
		  {v[l]=1;
		   x2-=l;
		  }
	 if(!v[x]) x2-=x;
	 if(!v[xx]) x2-=xx;
	 g<<x2<<'\n';
	}
       else
	{for(j=2;j<=xx;j+=2)
	  {v[j]=1;
	   x2-=j;
	  }
	 for(j=3;j<=jj;j=j+2)
	  if(!v[j])
	    if((prim(j))&&(x%j==0))
	      for(l=j;l<=xx;l=l+j)
		if(!v[l])
		  {v[l]=1;
		   x2-=l;
		  }
	 if(!v[x]) x2-=x;
	 if(!v[xx]) x2-=xx;
	 g<<x2<<'\n';
	}
    }    
 }

f.close();

g.close();
return 0;
}