Pagini recente » Cod sursa (job #1610908) | Cod sursa (job #2570107) | Cod sursa (job #536098) | Cod sursa (job #2338075) | Cod sursa (job #238459)
Cod sursa(job #238459)
#include <stdio.h>
int phi[100005],ciur[100005],test[100005],exp[100005];
int m,max;
void read ()
{
int i;
scanf ("%d",&m);
for (i=1; i<=m; ++i)
{
scanf ("%d",&test[i]);
phi[test[i]]=1;
if (test[i]>max)
max=test[i];
}
}
void ciuru ()
{
int i,j;
for (i=2; i<=max; ++i)
if (!ciur[i])
for (j=2*i; j<=max; j+=i)
ciur[j]=1;
}
void desc (int n)
{
int f,p,i;
f=2;
for (i=1; i<=max; ++i)
exp[i]=0;
while (n!=1)
{
p=0;
while (n%f==0)
{
n/=f;
p++;
}
if (p!=0)
exp[f]=1;
f++;
}
}
void solve ()
{
int i,j,k;
for (i=1; i<=m; ++i)
{
desc (test[i]);
for (j=2; j<=test[i]; ++j)
if (exp[j])
{
phi[test[i]]*=j-1;
for (k=1; k<exp[j]; ++k)
phi[test[i]]*=j;
}
printf ("%d\n",2*phi[test[i]]*test[i]);
}
}
int main ()
{
freopen ("sum.in","r",stdin);
freopen ("sum.out","w",stdout);
read ();
ciuru ();
solve ();
return 0;
}