Pagini recente » Cod sursa (job #461396) | Cod sursa (job #930909) | Cod sursa (job #823649) | Cod sursa (job #1724384) | Cod sursa (job #314834)
Cod sursa(job #314834)
#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);
while(x%2==0)
{
phi=phi/2;
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;
}