Cod sursa(job #244505)

Utilizator SmarandaMaria Pandele Smaranda Data 15 ianuarie 2009 11:06:12
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<stdio.h>
#include<math.h>
#define DMAX 50006
char p[DMAX];
void ciur(long n)
{
long i,j,lim;
lim=sqrt(n);
for (i=1;2*i+1<=lim;i++)
    for (j=2*i*i+2*i;2*j+1<=n;j=j+2*i+1)
	    p[j]=1;
}

int main()
{
long n,i,e,j,x,k;
long double cx,phi,sum;

freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);

scanf("%ld",&n);
for (j=1;j<=n;j++)
	{
	  scanf ("%Lf",&cx);
	  x=cx;
	  ciur (x);
	  phi=cx;
	  if (x%2 && p[(x-1)/2]==0)
		 {
		  phi=phi/x*(x-1);
		  sum=cx/2*phi;
		  sum=sum+sum+cx*phi;
		  printf("%.0Lf\n",sum);
		  sum=0;
		 }
		else
		{
	  for (i=1;2*i+1<=x;i++)
	  if (p[i]==0)


			 {
			 e=0;
			   while (x%2==0)
				  {
				    e++;
				    x=x/2;
				  }
				  if (e)
				  phi=phi/(2*i+1)*(2*i);
			   e=0;
			   k=i*2+1;
			   while (x%k==0)
				   {
					e++;
					x=x/(i*2+1);
				   }
			   if (e)
				  phi=phi/(2*i+1)*(2*i);

			 }
				 if (x>1)
				  {
				    phi=phi/(2*x+1)*(2*x);

				  }
	   x=cx;
	   k=phi;
	  sum=x/2*k;
	  sum=sum+sum+x*k;
	  printf("%.0Lf\n",sum);
	  sum=0;}
	}

return 0;
}