Pagini recente » Cod sursa (job #1369147) | Cod sursa (job #2461653) | Cod sursa (job #2968134) | Cod sursa (job #2837247) | Cod sursa (job #370972)
Cod sursa(job #370972)
#include <stdio.h>
#include <math.h>
//char prim[500001];
long long prim[1000005];
long long n,j=0;
void sterge(long long x){
long long i;
i=x*x;
while(i<=n){
prim[i]=1;
i+=x;
}
}
long long tot(long long x){
long long produs=x,i=1;
double produs2=produs,temp;
while(x!=1){
while((x%prim[i]!=0)&&(i<=j)){i++;}
temp=(double) prim[i];
produs2=produs2*(1-(1/temp));
do{x=x/prim[i];}while((x%prim[i]==0)&&(x!=1));
}
produs=produs2;
return produs;
}
int main(){
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%lld",&n);
long long i,sum=0;
for(i=2;i<=sqrt(n);i++){
if(prim[i]==0){sterge(i);}
}
for(i=2;i<=n;i++){
if(prim[i]==0){j++;prim[j]=i;}
}
prim[++j]=n;
for(i=1;i<=n;i++){
sum+=tot(i);
}
printf("%lld",2*sum-1);
return 0;
}