Cod sursa(job #113053)

Utilizator alex_dincaDinca Alexandru-Nicolae - UPB alex_dinca Data 8 decembrie 2007 16:25:25
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream.h>
#include<math.h>
#define nrfe 1000001

long long n, a[nrfe], x[nrfe], i, j;
long long e, aux, d, sol, aux2, aux3;

void citire(){
ifstream fin("fractii.in");
fin>>n;
fin.close();
}

void eratostene(){
for(i=2;i<=n;i++)
   if(a[i]==0)
      for(j=2;j<=n/i;j++) a[i*j]=i;
}

void afisare(){
ofstream fout("fractii.out");
fout<<sol<<'\n';
fout.close();
}

long long fc(long long nr){
if(!a[nr]) return (nr-1);
else{d=a[nr];
     aux=nr;
     e=0;
     while(aux>0 && aux%d==0) {
	  e++;
	  aux/=d;
	  }
    if(aux==1) return ((d-1)*pow(d,e-1));
    else {aux2=pow(d,e);
	  aux2=x[aux2];
	  aux2*=x[aux];
	  return aux2;
          }
    }
}

int main(){
memset(a,0,sizeof(a));
citire();
x[1]=0; x[2]=1; x[3]=2;
eratostene();
for(i=4;i<=n;i++) x[i]=fc(i);
sol=0;
for(i=2;i<=n;i++) sol+=x[i];
sol*=2;
sol++;
afisare();
return 0;
}