Cod sursa(job #69541)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 3 iulie 2007 14:57:03
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<stdio.h>
#include<fstream.h>
#include<math.h>

typedef struct
{
  long long x, e;
}  factor;

factor v[10];

long long n, contor, nr, x;

int prim(long x)
{
  if (x==2) return 1;
  if (x==1) return 0;
  if (x%2==0) return 0;
  for (long long unsigned d=3; d*d<=x; d+=2)
    if (x%d==0) return 0;
  return 1;
}

void descomp(long  long x)
{
  long long exp, d;
  d=2;
  nr=0;
  while (x!=1)
   {
     exp=0;
     if (x%d==0)
       {
	 nr++;
	 while (x%d==0)
	  {
	    exp++;
	    x/=d;
	  }
	 v[nr].e=exp;
	 v[nr].x=d;
       }
     d++;
   }
}

long long totient(long long x)
{
  long long i, c=1;
  for (i=1; i<=nr; i++)
    c*=((v[i].x-1)*pow(v[i].x,v[i].e-1));
  return c;
}






void prelucrare2()
{
   long long  i, j, s1;
   freopen("sum.in","r",stdin);
   freopen("sum.out","w",stdout);
   scanf ("%lld",&n);
   for (i=1; i<=n; i++)
     {
       scanf("%lld",&x);
	if (prim(x)==0) descomp(x);  
 	   else {v[1].e=1; v[1].x=x; nr=1;}
	
       long long a=totient(x);
       s1=(x*a)/2;

      s1*=2;
      printf("%lld\n",s1*2);
     }
}




int main()
{
  prelucrare2();
  return 0;
}