Cod sursa(job #2828618)

Utilizator raul41917raul rotar raul41917 Data 7 ianuarie 2022 17:56:16
Problema Fractii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("fractii.in");
ofstream fo("fractii.out");
int totient(int x)
{
    int p=1;
    int copie=x;
    if(x%2==0)
    {
        while(x%2==0)
        {
            p=p*2;
            x/=2;
        }
        p/=2;
    }
    int d=3;
    while(x!=1)
    {
        if(x%d==0)
        {
            while(x%d==0)
            {
                p=p*d;
                x/=d;
            }
            p=p/d;
            p=p*(d-1);
        }
        d+=2;
        if(d*d>copie)
            d=x;
    }
    return p;
}
int freQ[1000001];
void Prime(int n)
{
    freQ[1]=1;
    for(int i=2;i<=1000000;i++)
    {
        if(freQ[i]==0)
        {
            int j=2;
            while(i*j<=1000000)
            {
                freQ[i*j]=1;
                j++;
            }
        }
    }
}
int main()
{
    int n;
    fi>>n;
    Prime(n);
    unsigned long long sum=0;
    for(int i=n;i>1;i--)
    {
        if(freQ[i]==0)
            sum=sum+2*(i-1);
        else
            sum=sum+2*totient(i);
    }
    sum++;
    fo<<sum;
    fi.close();
    fo.close();
    return 0;
}