Cod sursa(job #2226374)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 30 iulie 2018 09:03:59
Problema Sum Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

ifstream fin("sum.in");
ofstream fout("sum.out");

typedef long long ll;
typedef long double ld;

const int N=30000+5;
ll v[N],phi[N];

int main()
{
    for(int i=1;i<N;i++)
        phi[i]=i;
    for(int i=2;i<N;i++)
        if(phi[i]==i)
            for(int j=i;j<N;j+=i)
                phi[j]/=i,phi[j]*=(i-1);
    v[1]=1;
    v[2]=1;
    for(int i=3;i<N;i++)
    {
        v[i]=(ll)i*(i+1)/2;
        for(int j=1;j*j<=i;j++)
        {
            if(i%j==0)
            {
                if(j!=1) v[i]-=v[i/j]*j;
                if(j*j==i) break;
                v[i]-=v[j]*(i/j);
            }
        }
    }
    for(int i=1;i<N;i++)
        v[i]+=v[i],v[i]+=(ll)i*phi[i];
    int t;
    fin>>t;
    while(t--)
    {
        int x;
        fin>>x;
        fout<<v[x]<<"\n";
    }
    return 0;
}