Cod sursa(job #2667374)

Utilizator leru007Leru Ursu leru007 Data 3 noiembrie 2020 13:14:53
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
ll n,k,i,j;
ll prim[1000005];
vector<ll> v[1000006];
ll lgp(ll x,ll y){
    if(y==0) return 1;
    if(y==1) return x;
    ll t=lgp(x,y/2);
    if(y%2==1) return t*t*x;
    else return t*t;
}
ll euler(ll x){
    ll ans=1;
    for(ll q=0;q<v[x].size();q++){
        ll power=1,e=v[x][q];
        //cout<<e<<" ";
        while(x%(e*v[x][q])==0) power++,e*=v[x][q];
        ans*=lgp(v[x][q],power-1)*(v[x][q]-1);
    }
    return ans;
}
int main(){
    for(i=2;i<=1e6;i++){
        if(prim[i]==0){
            for(j=i+i;j<=1e6;j+=i){
                prim[j]=i;
                v[j].pb(i);
            }
            v[i].pb(i);
        }
    }

    fin>>n;
    ll sum=0;
    for(i=2;i<=n;i++){
        sum+=euler(i);
        //cout<<euler(i)<<"\n";
    }
    sum=sum*2+1;
    fout<<sum;

    return 0;
}