Cod sursa(job #2469539)

Utilizator ela_topaTopa Elena ela_topa Data 7 octombrie 2019 18:11:10
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
//fractii de pe infoarena
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("fractii.in");
ofstream fout("fractii.out");
constexpr int NX = 1000000005;

long long fi[NX], n;
int main()
{
    fin>>n;
    for(int i=1; i<=n; ++i)
    {
        fi[i]=i; //fac un vector cu numerele de la 1 la n
    }
    for(int d=2; d<=n; ++d)//incep de la 2
    {
        if(fi[d]==d) //daca nu a fost modificat inseamna ca e prim
        {
            fi[d]-=1; //si pun in fi[d] numerele mai mici decat d si prime cu el
            //se ia si 1 in considerare ca fiind prim
            for(int i=d*2; i<=n; i+=d) //dupa merg in continuare cu multiplii lui d
            {
                fi[i]*=(d-1); //si aplic indicatorul lui euler
                fi[i]/=d;
            }
        }
    }

    long long suma{1};
    for(int i=2; i<=n; ++i)
        suma+=(2*fi[i]); //fac suma elementelor din fi de la 2 in sus si o inmultesc cu 2
    fout<<suma;

    return 0;

}