Cod sursa(job #2609335)

Utilizator popoviciAna16Popovici Ana popoviciAna16 Data 2 mai 2020 14:01:19
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda greseli_destepte Marime 1.06 kb
#include <fstream>
using namespace std;

ifstream fin("fractii.in");
ofstream fout("fractii.out");

bool b[1000001];
int v[1000001];
int e[2000001];

int euler(int x)
{
    if (b[x] == 0)
        return x-1;
    int rasp = x;
    int i = 1;
    while (v[i] * v[i] <= x)
    {
        if (x%v[i] == 0)
        {
            rasp = rasp/v[i] * (v[i]-1);
            while (x%v[i] == 0)
                x = x/v[i];
        }
        i++;
    }
    if (x > 1)
        rasp = rasp/x * (x-1);
    return rasp;
}

int main()
{
    int i, j, n;
    long long nr = 0;
    b[0] = b[1] = 1;
    for (i = 2; i<=1000; i++)
        if (b[i] == 0)
            for (j = i*i; j<=1000000; j=j+i)
                b[j] = 1;
    for (i = 1; i<=1000000; i++)
        if (b[i] == 0)
            v[++v[0]] = i;
    fin >> n;
    for (i = 2; i<=n; i++)
    {
        if (e[i] == 0)
        {
            e[i] = euler(i);
            if (i%2 == 0)
                e[2*i] = 2*e[i];
            else
                e[2*i] = 2*e[i] - i+1;
        }
        nr = nr + e[i];
    }
    fout << 2*nr + 1;
    return 0;
}