Cod sursa(job #953142)

Utilizator classiusCobuz Andrei classius Data 25 mai 2013 01:22:46
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;
ifstream f("sum.in");
ofstream g("sum.out");

void erst(vector<long long>&);
void fctrz(vector<long long>&,vector<long long>&);

int main()
{
    int t;
    vector<long long> p,phi(2,0);
    f>>t;

    erst(p);
    fctrz(phi,p);

    while(t--){
        long long n;
        f>>n;
        long long s=2*phi[n]*n;
        g<<s<<'\n';
    }

    return 0;
}

void erst(vector<long long>& v)
{
    vector<bool> ok(500,0);
    for(int i=2;i<500;i++){

        if(!ok[i]){
            v.push_back(i);

            for(int j=2;j*i<500;j++)
                ok[i*j]=1;
        }
    }
}

void fctrz(vector<long long>& phi,vector<long long>& p)
{
    for(int i=2;i<100001;i++){
        int fi=1,ax=i;

        for(size_t j=0;j<p.size()&&ax!=1;j++){
            int nr=0;
            while(ax%p[j]==0){
                nr++;
                ax/=p[j];
            }
            if(nr)
                fi*=(p[j]-1)*pow(double(p[j]),nr-1);
        }

        if(fi==1)
            fi=i-1;
        phi.push_back(fi);
    }
}