Cod sursa(job #315418)

Utilizator dya_ndmNanuti Diana-Maria dya_ndm Data 15 mai 2009 16:16:17
Problema Sum Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>   
#include<math.h>   
#define LMAX 500   
  
long n,x;   
  
char c[550];
  
void ciur(long n)   
{   
long long i,j;   
for(i=1;2*i+1<=n;++i)   
   if(c[i]==0)   
     for(j=2*i*i+2*i;2*j+1<=n;j=j+2*i+1)   
         c[j]=1;   
}   
  
long long euler()   
{
long long i,phi=x,d=0,dmax;
if(x<=2)
  return 1;
if(x%2!=0)
  {
  if(c[(x-1)/2]==0)
    return x-1;
  }
dmax=sqrt(x);
if(x%2==0)
  {
  phi=phi/2;
  while(x%2==0)
       x=x/2;
  }
i=1;
while(d<=dmax && x>1)   
     {   
     if(c[i]==0)   
       {   
       d=2*i+1;   
       while(x%d==0)   
            x=x/d;   
       if(x)   
         phi=phi/d*(d-1);   
       }   
     ++i;   
     }   
if(x>1)   
  phi=phi/x*(x-1);   
return phi;   
}   
  
int main()   
{   
freopen("sum.in","r",stdin);   
freopen("sum.out","w",stdout);   
int i,cx;   
long long s;   
ciur(LMAX);   
  
scanf("%ld",&n);   
  
for(i=1;i<=n;++i)
   {   
   scanf("%ld",&x);   
   cx=x;   
   s=euler();   
   s=2*s*cx;   
   printf("%lld\n",s);   
   }   
return 0;   
}