Cod sursa(job #1393183)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 19 martie 2015 10:14:14
Problema Sum Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <cstdio>
#include <cmath>
#define DIM 10000
char buff[DIM];
int poz=0;
void citeste(int &numar)
{
     numar = 0;
     while (buff[poz] < '0' || buff[poz] > '9')     
          if (++poz == DIM) 
               fread(buff,1,DIM,stdin),poz=0;
     while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar = numar*10 + buff[poz] - '0';
          if (++poz == DIM) 
               fread(buff,1,DIM,stdin),poz=0;               
     }     
}
long long sum,phi;
int n,x;
int prime[66]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 
             167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317};
int main()
{
    freopen ("sum.in","r",stdin);
    freopen ("sum.out","w",stdout);
    citeste(x);
    for(int vv=1;vv<=x;vv++)
    {
            citeste(n);
            phi=n;
            int temp=n;
            int p=1;
            for(int i=0;i<65;i++)
            {
                    if(n%prime[i]==0)
                    {
                                     phi/=prime[i];
                                     phi*=(prime[i]-1);
                                     while(n%prime[i]==0) n/=prime[i];
                                     if(n==1) break;
                    }
                    else
                    {
                        if(n<prime[i]) break;
                    }
            }
            if(n!=1)
            {
                    phi/=n;
                    phi*=(n-1);
            }
            sum=(long long)2*temp*phi;
            printf("%lld\n",sum);
    }
}