Cod sursa(job #2638039)

Utilizator etienAndrone Stefan etien Data 26 iulie 2020 16:05:52
Problema Fractii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int ciur[1000001];
vector<int>prime;
long long euler(long long x)
{
    long long d,cx=x;
    for(auto d:prime)
    {
        if(x%d==0)
        {
            cx/=d;
            cx*=d-1;
            while(x%d==0)
                x/=d;
        }
        if(d*d>x)
            break;
    }
    if(x>1)
    {cx/=x;
    cx*=x-1;}
    return cx;
}
long long solve(long long x)
{
    long long i,s=0;
    for(i=1;i<=x;i++)
        s+=euler(i);
    s*=2;
    s-=1;
    return s;
}
int main()
{
    int n;
    fin>>n;
    for(int i=2;i*i<=n;i+=2)
        if(!ciur[i])
            for(int j=i*i;j<=n;j+=i)
                ciur[j]=true;
    for(int i=2;i<=n;i++)
        if(!ciur[i])
            prime.push_back(i);
    fout<<solve(n);
}