Cod sursa(job #2469300)

Utilizator ela_topaTopa Elena ela_topa Data 6 octombrie 2019 19:15:01
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
//fractii de pe infoarena
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
constexpr int NX = 1000005;
long long fi[NX], n;
int main()
{
    cin>>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
    cout<<suma;
    return 0;
}