Cod sursa(job #897392)

Utilizator adascaluAlexandru Dascalu adascalu Data 27 februarie 2013 20:20:58
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
using namespace std;
#include<cstdio>
#include<vector>
#include<algorithm>
#define dmax 100010
vector<int>phi(2*dmax);
void calc_phi(int n);
int main ()
{
    int i,n,max;
    vector<int>v(dmax);
    FILE *f,*g;
    f=fopen("sum.in","r");
    fscanf(f,"%d%d",&n,&max);
    for(i=2;i<=n;i++)
        {
        fscanf(f,"%d",&v[i]);
        max=max<v[i] ?v[i]:max;
        }
    calc_phi(max*2);
    fclose(f);
    g=fopen("sum.out","w");
    for(i=1;i<=n;i++)
        fprintf(g,"%lld\n",(((long long)phi[v[i]]*(long long)v[i])<<1));
    fclose(g);
    return 0;
}
void calc_phi (int n)
{
    phi[1]=1;
    int i,j;
    for(i=2;i<=n;i++)
        phi[i]=i;
    for(i=2;i<=n;i++)
        if(phi[i]==i)
        for(j=i;j<=n;j+=i)
            phi[j]*=(i-1),phi[j]/=i;
}