Pagini recente » Cod sursa (job #3217335) | Cod sursa (job #570219) | Cod sursa (job #955811) | Cod sursa (job #1501410) | Cod sursa (job #195393)
Cod sursa(job #195393)
#include <stdio.h>
#include <string.h>
#define nmax 1024
#define cmax 3276
#define BAZA 1000
int n,m,k,sol[cmax],rez[cmax],s[cmax],s1[cmax],c[cmax],s8[cmax],ss[cmax];
void inm(int x)
{
int i,t=0;
for(i=1;i<=rez[0]||t;++i)
{
t+=rez[i]*x;
rez[i]=t%BAZA;
t/=BAZA;
}
rez[0]=i-1;
}
void mul()
{
int i, j, t = 0;
for (i = 1; i <= rez[0]; i++)
{
for (t = 0, j = 1; j <= s1[0] || t; j++, t /= BAZA)
c[i+j-1] = (t += c[i+j-1] + rez[i]*s1[j]) % BAZA;
if (c[0] < i+j-2) c[0] = i+j-2;
}
}
void inmult2()
{int i,t,la=rez[0];
for (i=1,t=0;i<=la;++i)
{s[i]=(rez[i]*4+t)%BAZA;
t=(rez[i]*4+t)/BAZA;
}
if (t) {s[i]=t;++i;}
s[0]=i-1;
}
void aduna()
{int i,t,la=s[0],lb=c[0];
for (i=1,t=0;i<=la&&i<=lb;++i)
{s8[i]=(s[i]+c[i]+t)%BAZA;
t=(s[i]+c[i]+t)/BAZA;
}
for (;i<=la;++i)
{s8[i]=(s[i]+t)%BAZA;
t=(s[i]+t)/BAZA;
}
for (;i<=lb;++i)
{s8[i]=(c[i]+t)%BAZA;
t=(c[i]+t)/BAZA;
}
if (t) {s8[i]=t;++i;}
s8[0]=i-1;
}
void inmult4()
{int i,t,la=rez[0];
for (i=1,t=0;i<=la;++i)
{s1[i]=(rez[i]*2+t)%BAZA;
t=(rez[i]*2+t)/BAZA;
}
if (t) {s1[i]=t;++i;}
s1[0]=i-1;
}
int main()
{
int i,j,l;
freopen("sarpe.in","rt",stdin);
freopen("sarpe.out","wt",stdout);
scanf("%d", &m);
if (m>1){
rez[0]=rez[1]=1;
inm(m);
inmult2();
rez[1]-=1;
inmult4();
rez[1]-=1;
mul();
aduna();
printf("%d",s8[s8[0]]);
for(i=s8[0]-1;i>0;--i)
printf("%03d",s8[i]);
printf("\n"); }
else printf("2");
return 0;
}