Pagini recente » Cod sursa (job #518866) | Cod sursa (job #1337064) | Cod sursa (job #311929) | Cod sursa (job #3192414) | Cod sursa (job #370958)
Cod sursa(job #370958)
#include <stdio.h>
#include <math.h>
//char prim[500001];
long prim[1000005];
long n,j=0;
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<=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("%ld",&n);
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);
}
sum--;
printf("%ld",2*sum-1);
return 0;
}