Cod sursa(job #50245)

Utilizator spixMarius Gherman spix Data 7 aprilie 2007 11:49:38
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream.h>
#include<math.h>
ifstream in("fractii.in");
ofstream out("fractii.out");
long int v[1000001],n,sol=1;
int a[20],c[20];
void fact(long int x)
{ long i;
 if(x%2==0)
 if((x/2)%2==0)

 v[x]=v[x/2]*2;
 else
 v[x]=v[x/2];
 else
 {
 double m=sqrt(x);
 for(i=3;i<=m;i+=2)
    if(x%i==0)
    {
     if((x/i)%i==0)
     v[x]=v[x/i]*i;
     else
     v[x]=v[x/i]*(i-1);
     i=x;
    }
    if((i-2)!=x)
   v[x]=x-1;
   }
}
 void adunare(long int x)
 { int b[7]; long int i;
    for(i=6;i>=0;i--)
     {
       b[i]=x%10;a[13+i]+=b[i];
	x=x/10;
    }
    for(i=19;i>=0;i--)
    if(a[i]/10!=0)
    {
      a[i-1]+=a[i]/10;
      a[i]=a[i]%10;
      c[i-1]=1;
    }
 }
int main()
{ long long i;
 v[1]=1;
 in>>n;
 a[19]=1;
 c[19]=1;
 for(i=2;i<=n;i++)
 {
 fact(i);
 adunare(2*v[i]);
 } for(i=0;i<=19;i++)
if(c[i])out<<a[i];
return 0;
}