Cod sursa(job #1693168)

Utilizator llalexandruLungu Alexandru Ioan llalexandru Data 22 aprilie 2016 16:18:44
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>
#define NM 1000005

using namespace std;

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

int n;
bool Prim[NM];
vector <int> P;

void GenCiur()
{
    int i, j;
    P.push_back(2);
    for (i=3; i<=n; i+=2)
    {
        if (Prim[i]==0)
        {
            P.push_back(i);
            for (j=i; j<=n; j+=2*i)
                Prim[j]=1;
        }
    }
}

long long Euler(int x)
{
    long long a=x, i;
    for (i=0; P[i]<=x && i<P.size(); i++)
    {
        if (x%P[i]==0)
        {
            a/=P[i];
            a*=P[i]-1;
        }
    }
    return a;
}

int main()
{
    long long i, sol=0;
    fin>>n;
    GenCiur();
    for (i=2; i<=n; i++)
    {
        sol+=Euler(i);
    }
    fout<<2*sol+1;
    return 0;
}