Cod sursa(job #370927)

Utilizator SzabiVajda Szabolcs Szabi Data 2 decembrie 2009 19:36:11
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#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;
}