Pagini recente » Cod sursa (job #54743) | Cod sursa (job #1768909) | Cod sursa (job #191644) | Cod sursa (job #573206) | Cod sursa (job #1773749)
#include<fstream>
using namespace std;
ifstream fi("patrate2.in");
ofstream fo("patrate2.out");
long long A[100001],B[100001],C[100001];
long long n,i,p;
void inm(long long x)
{
long long i,t=0LL;
for(i=1; i<=A[0]; i++)
{
A[i]=A[i]*x+t;
t=A[i]/10;
A[i]=A[i]%10;
}
while(t)
{
A[++A[0]]=t%10;
t/=10;
}
}
void inm2()
{
long long i,j,t=0;
C[0]=B[0]+B[0]-1;
for(i=1;i<=B[0]+B[0];)
C[i++]=0;
for(i=1;i<=B[0];i++)
for(j=1;j<=B[0];j++)
C[i+j-1]+=B[i]*B[j];
for(i=1;i<=C[0];i++)
{
t=(C[i]+=t)/10;
C[i]%=10;
}
if(t)
C[++C[0]]=t;
for(i=0; i<=C[0]; i++)
B[i]=C[i];
}
void inmv()
{
long long i,j,t=0;
C[0]=A[0]+B[0]-1;
for(i=1;i<=A[0]+B[0];)
C[i++]=0;
for(i=1;i<=A[0];i++)
for(j=1;j<=B[0];j++)
C[i+j-1]+=A[i]*B[j];
for(i=1;i<=C[0];i++)
{
t=(C[i]+=t)/10;
C[i]%=10;
}
if(t)
C[++C[0]]=t;
for(i=0; i<=C[0]; i++)
A[i]=C[i];
}
int main()
{
fi>>n;
A[0]=A[1]=1;
for(i=1; i<=n; i++)
{
inm(i);
}
p=n*n;
B[0]=1;
B[1]=2;
for(i=0; (1<<i)<=p; i++)
{
if (((1<<i)&p)>0)
inmv();
inm2();
}
for(i=A[0]; i>=1; i--)
fo<<A[i];
fo<<"\n";
fi.close();
fo.close();
return 0;
}