Pagini recente » Cod sursa (job #1333806) | Cod sursa (job #2842441) | Cod sursa (job #134249) | Cod sursa (job #2499165) | Cod sursa (job #370927)
Cod sursa(job #370927)
#include <stdio.h>
#include <math.h>
//char prim[500001];
long prim[1000004];
long n;
void tolt(long x){
long i;
i=x*x;
while(i<=n){
prim[i]=1;
i+=x;
}
}
long tot(long x){
long szorzat=x,i=1;
double szorzat2=szorzat,temp;
while(x!=1){
while((x%prim[i]!=0)&&(i<=n/2+1)){i++;}
temp=(double) prim[i];
szorzat2=szorzat2*(1-(1/temp));
do{x=x/prim[i];}while((x%prim[i]==0)&&(x!=1));
}
szorzat=szorzat2;
return szorzat;
}
int main(){
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%ld",&n);
long i,j=0,ossz=0;
for(i=2;i<=sqrt(n);i++){
if(prim[i]==0){tolt(i);}
}
for(i=2;i<=n;i++){
if(prim[i]==0){j++;prim[j]=i;}
}
prim[++j]=n;
for(i=1;i<=n;i++){
ossz+=tot(i);
}
printf("%ld",2*ossz-1);
return 0;
}