Cod sursa(job #2455468)

Utilizator adiaioanaAdia R. adiaioana Data 11 septembrie 2019 20:03:50
Problema Fractii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>

using namespace std;
ifstream cin("fractii.in");
ofstream cout("fractii.out");

int N, fact[1000100][10];
long long ans, ind, inm, imp;
void premake();
int main()
{
    cin>>N;

    premake();
    ans=0;
    for(int nr=2; nr<=N; ++nr)
    {
        ind=nr; imp=1; inm=1;
        for(int i=1; i<=fact[nr][0]; ++i)
            imp*=fact[nr][i], inm*=(fact[nr][i]-1);

        ind/=imp;
        ind*=inm;
        ans+=ind;
    }

    cout<<(ans*2)+1<<'\n';

    return 0;
}

void premake()
{
    bool ciur[1000100]={0};
    ciur[1]=ciur[0]=1;
    fact[2][fact[2][0]=1]=2;
    for(int i=4; i<=N; i+=2)
        fact[i][++fact[i][0]]=2;

    for(int i=3; i<=N; i+=2)
        if(ciur[i]==0)
        {
            fact[i][++fact[i][0]]=i;
            for(int j=2; j*i<=N; j++)
                ciur[i*j]=1, fact[i*j][++fact[i*j][0]]=i;
        }
}