Cod sursa(job #1067614)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 27 decembrie 2013 10:23:37
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <vector>

#define maxn 1000001

using namespace std;

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

vector<int> pr;
int f,phi[maxn],lp[maxn],n;

int main ()
{
    fin>>n;

    phi[1] = 1;

    for (int i=2; i<=n; ++i)
    {
        if (lp[i] == 0)
        {
            lp[i] = i;
            phi[i] = i-1;
            pr.push_back (i);
        }

        else
        {
            if (lp[i/lp[i]] == lp[i])
                phi[i] = phi[i/lp[i]]*lp[i];
            else
                phi[i] = phi[i/lp[i]]*(lp[i]-1);
        }

        for (int j=0; j<pr.size() && pr[j] <= lp[i] && pr[j]*i <= n; ++j)
               lp[pr[j]*i] = pr[j];

        f += phi[i];
    }

    fout<<f*2+1;
}