Cod sursa(job #3329610)

Utilizator Pop_EmilPal Tamas Pop_Emil Data 14 decembrie 2025 15:48:24
Problema Fractii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
using namespace std;

FILE *in = fopen("fractii.in", "r"), *out = fopen("fractii.out", "w");
int n, prim[1000005];
long long res = 1;

int main()
{
    fscanf(in, "%d", &n);

    for(int i = 1; i <= n; ++i)
        prim[i] = 1;

    int rem;
    long phi_i;
    for(int i = 2; i <= n; ++i){
        for(int j = 2*i; j <= n; j += i)
            prim[j] = 0;

        if(prim[i])
            phi_i = i - 1;
        else {
            phi_i = i;
            rem = i;
            for(int pi = 2; pi <= rem; ++pi)
                if(prim[pi] && i % pi == 0){
                    phi_i = phi_i * (pi - 1) / pi;
                    //printf("- %d %d %d %d - ", i, rem, pi, phi_i);
                    while (rem % pi == 0){
                        rem /= pi;
                        if (prim[rem]){
                            if(rem != pi){
                                phi_i = phi_i * (rem - 1) / rem;
                                rem = 1;
                            }
                            //printf("- %d %d %d %d - ", i, rem, pi, phi_i);
                            break;
                        }
                    }

                }
        }
        res += 2 * phi_i;
    }


    fprintf(out, "%d", res);
    return 0;
}