Cod sursa(job #3273012)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 1 februarie 2025 08:58:38
Problema Fractii Scor 100
Compilator cpp-64 Status done
Runda cex_8 Marime 0.84 kb
#include <fstream>

using namespace std;

ifstream f("fractii.in");
ofstream g("fractii.out");

const int nmax = 1e6 + 5;
int n, Min[nmax];
long long numi;
bool ciur[nmax];

void Eras()
{
    for(int i = 2; i * i <= nmax - 5; i ++)
        if(!ciur[i])
            for(int j = 2 * i; j <= nmax; j += i)
            {
                ciur[j] = true;

                if(!Min[j]) Min[j] = i;
            }

    for(int i = 1; i <= nmax; i ++)
        if(!ciur[i])
            Min[i] = i;
}

int phi(int x)
{
    int ans = x;
    while(x > 1)
    {
        int d = Min[x];
        ans = (ans / d) * (d - 1);

        while(x % d == 0) x /= d;
    }

    return ans;
}

int main()
{
    Eras();
    f >> n; numi = 1;
    for(int i = 2; i <= n; i ++)
        numi += 2 * phi(i);

    g << numi;
    return 0;
}