Pagini recente » Cod sursa (job #1352895) | Cod sursa (job #2721967) | Cod sursa (job #713828) | Cod sursa (job #597729) | Cod sursa (job #2667439)
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
using namespace std;
ifstream fin("fractii.txt");
ofstream fout("fractii.out");
ll n,k,i,j;
ll eul[1000006];
bool prim[1000006];
vector<ll> pri;
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;
ll j=0,power=1,nr;
bool priim=0;
while(j<pri.size()&&pri[j]<=x){
if(priim==1) break;
if(x%pri[j]==0){
nr=pri[j];
while(x%(nr*pri[j])==0) power++, nr*=pri[j];
ans=lgp(pri[j],power-1)*(pri[j]-1);
priim=1;
}
j++;
}
eul[x]=eul[x/nr]*ans;
return eul[x];
}
int main(){
eul[1]=1;
fin>>n;
pri.pb(2);
prim[2]=1;
for(i=3;i<=n;i+=2){
if(prim[i]==0){
for(j=i*i;j<=n;j+=2*i) prim[j]=1;
pri.pb(i);
}
}
//for(i=0;i<pri.size();i++) cout<<pri[i]<<" ";
ll sum=0;
for(i=2;i<=n;i++){
sum+=euler(i);
//cout<<euler(i)<<"\n";
}
sum=sum*2+1;
fout<<sum;
//cout<<pri.size();
return 0;
}