Pagini recente » Cod sursa (job #2410956) | Borderou de evaluare (job #863485) | Cod sursa (job #2484488) | Cod sursa (job #1564459) | Cod sursa (job #1843822)
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
int n;
bool a[1000001];
int b[500001];
void ciur(int n){
for(int i=2;i<=n;i++){
if(!a[i]){
for(int j=2*i;j<=n;j+=i){
a[j]=1;
}
}
}
}
int totient(int q){
int i=2,p=1;
while(q!=1){
if(q%i==0){
b[i]+=1;
q/=i;
}else i++;
}
for(int k=2;k<=i;k++){
if(b[k]){
p*=(k-1)*(pow(k,(b[k]-1)));
}
}
memset(b, 0, sizeof(b));
return p;
}
int main(){
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
scanf("%d",&n);
ciur(n+1);
long long x,x2=0;
x=n+n-1;
for(int i=2;i<=n;i++){
if(!a[i]){
x2+=i-2;
}else{
x2+=totient(i)-1;
}
}
x+=2*x2;
printf("%d",x);
}