Cod sursa(job #238464)

Utilizator DraStiKDragos Oprica DraStiK Data 2 ianuarie 2009 11:32:12
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
int phi[100005],test[100005];
int m,max;
void read ()
{
    int i;
    scanf ("%d",&m);
    for (i=1; i<=m; ++i)
    {
        scanf ("%d",&test[i]);
        if (test[i]>max)
			max=test[i];
	}
}
void ciuru ()
{
    int i,j;
    for (i=1; i<=max+1; ++i)
        phi[i]=i;
    for (i=2; i<=max+1; ++i)
		if (phi[i]==i)
            for (j=i; j<=max+1; j+=i)
            {
                phi[j]/=i;
                phi[j]*=i-1;
            }
}
void solve ()
{
    int i;
    for (i=1; i<=m; ++i)
        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;
}