Pagini recente » Cod sursa (job #2910018) | Cod sursa (job #2677536) | Cod sursa (job #2201845) | Cod sursa (job #2279005) | Cod sursa (job #370929)
Cod sursa(job #370929)
#include <stdio.h>
#include <math.h>
//char prim[500001];
long prim[1000005];
long n;
void sterge(long x){
long i;
i=x*x;
while(i<=n){
prim[i]=1;
i+=x;
}
}
long tot(long x){
long produs=x,i=1;
double produs2=produs,temp;
while(x!=1){
while((x%prim[i]!=0)&&(i<=n/2+1)){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("%ld",&n);
long i,j=0,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("%ld",2*sum-1);
return 0;
}