Cod sursa(job #370972)

Utilizator SzabiVajda Szabolcs Szabi Data 2 decembrie 2009 21:00:55
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#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;
}