Cod sursa(job #3146714)

Utilizator proflaurianPanaete Adrian proflaurian Data 22 august 2023 12:14:47
Problema Fractii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
const int N = 1000001;
int n,phi[N];

int main()
{
    f>>n;
    /// pasul 1 : pentru fiecare numar i de la 2 la n calculam indicatorul lui Euler phi[i]
    /// initial la fiecare pozitie i incarcam valoarea i
    for(int i=2;i<=n;i++)
        phi[i]=i;
    /// vom recunoste numerele prime prin faptul ca ele nu au fost afectate inca de un divizor prim
    /// deci la numerele prime vom gasi initial phi[i]=i
    for(int i=2;i<=n;i++)
        if(phi[i]==i)/// daca numarul este prim
        {
            /// modific toti multiplii acestui numar prim : impart cu i, inmultesc cu i-1
            for(int j=i;j<=n;j+=i)
                phi[j]=phi[j]/i*(i-1);
        }

    /// acum calculez solutia problemei Atentie poate fi mare deci vom lua solutia pe 64 de biti !!!
    int64_t sol=1LL; /// sol = 1+2*phi[2]+...+2*phi[n]
        for(int i=2;i<=n;i++)
            sol=sol+2*phi[i];
    g<<sol;
    return 0;
}