Cod sursa(job #3143037)

Utilizator StefanromanulStefan Parus Stefanromanul Data 27 iulie 2023 12:01:26
Problema Fractii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int prim[1000],er[1006];
int euler(int n)
{
    int k=168;
    int rez=1;
    for(int i=0;prim[i]*prim[i]<=n && i<k;i++)
    {
        if(n%prim[i]==0)
        {
            int nr=0;
            while(n%prim[i]==0)
            {
                nr++;
                n/=prim[i];
            }
            rez*=(prim[i]-1)*pow(prim[i],nr-1);
        }

    }
    if(n!=1)
    {
         rez*=n-1;
    }
    return rez;
}
int main()
{
    ifstream cin("fractii.in");
    ofstream cout("fractii.out");
    for(int i=2;i<=1000;i++)
    {
        if(!er[i])
        {
          for(int j=i+i;j<=1000;j+=i)
        {
            er[j]=1;
        }
        }

    }
    int k=0;
    for(int i=2;i<=1000;i++)
    {
        if(!er[i])
        {
            prim[k++]=i;        }
    }
    int n;
    cin>>n;
    int rez=0;
    rez=2*n-1;
    for(int i=2;i<=n;i++)
    {
        rez+=2*euler(i)-2;
    }
    cout<<rez;
    return 0;
}