Pagini recente » Clasament winners31bis | Cod sursa (job #395604) | Cod sursa (job #2944959) | Cod sursa (job #496212) | Cod sursa (job #246954)
Cod sursa(job #246954)
#include<stdio.h>
#include<math.h>
#define DMAX 30501
char p[DMAX];
long long e,n;
void ciur (long n)
{
long i,j,lim;
lim=sqrt(n)+1;
for (i=1;2*i+1<=lim;++i)
if (p[i]==0)
for (j=2*i*i+2*i;2*j+1<=n;j=j+2*i+1)
p[j]=1;
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
long nr,lim,i,x,j,cn,phi;
long long s=0;
scanf("%ld",&x);
for (j=1;j<=x;++j)
{ scanf("%ld",&n);
ciur(n);
phi=n;
cn=n;
e=0;
s=0;
lim=sqrt(n)+1;
while (n%2==0)
{
++e;
n=n/2;
}
if (e) phi=phi/2;
i=1;
while (2*i+1<=lim&&n>1)
{
e=0;
if (p[i]==0)
while (n%(2*i+1)==0)
{++e;
n=n/(2*i+1);
}
if (e)
phi=phi/(2*i+1)*(2*i);
++i;
if (n>1) phi=(phi/n)*(n-1);
}
s=2*cn*phi;
printf("%lld\n",s);}
return 0;
}