Pagini recente » Cod sursa (job #2391823) | Cod sursa (job #481977) | Cod sursa (job #280988) | Cod sursa (job #928529) | Cod sursa (job #314305)
Cod sursa(job #314305)
#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 phi()
{
long i,ti,cx,nr,lim,fi=1;
lim=sqrt(x);
ti=1;
i=1;
cx=x;
if((x%2==1)&&(c[(x-1)/2]==0))
return x-1;
if(lim*lim==x)
{
nr=x-1;
if(lim%2!=0)
if(c[(lim-1)/2]==0)
return nr-x/lim+1;
if(x%2==0)
nr=nr-x/2+1;
while(ti<lim)
{
ti=2*i+1;
if(c[i]==0)
if(cx%ti==0)
nr=nr-x/ti+1;
++i;
}
return nr;
}
while(ti<=lim)
{
ti=2*i+1;
if(c[i]==0)
if(cx%ti==0)
{
fi=fi*(ti-1);
cx=cx/ti;
}
++i;
}
if(cx>1)
fi=fi*(cx-1);
return fi;
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int i;
long long s;
ciur(LMAX);
scanf("%ld",&n);
for(i=1;i<=n;++i)
{
scanf("%ld",&x);
s=phi();
s=2*s*x;
printf("%lld\n",s);
}
return 0;
}