Pagini recente » Cod sursa (job #2609909) | Cod sursa (job #2681913) | Cod sursa (job #1396800) | Cod sursa (job #2226686) | Cod sursa (job #169109)
Cod sursa(job #169109)
#include<cstdio>
#include<cstring>
const int baza=1000;
const int cif=1500;
int nr[cif+1],aux[cif+1],n;
inline void patrat()
{
int i,j;
memset(aux,0,sizeof(aux));
for(i=cif;i>=cif/2;i--)
for(j=cif;j>=cif/2;j--)
aux[i+j-cif]+=nr[i]*nr[j];
for(i=cif;i>0;i--){
aux[i-1]+=aux[i]/baza;
aux[i]%=baza;}
memcpy(nr,aux,sizeof(nr));
}
inline void inm(int a)
{
int i;
nr[cif]*=a;
for(i=cif-1;i>=0;i--){
nr[i]*=a;
nr[i]+=nr[i+1]/baza;
nr[i+1]%=baza;}
}
void pow(int n)
{
if(n==0) {
nr[cif]=1;
return;}
pow(n/2);
patrat();
if(n%2) inm(2);
}
inline void print()
{
int i=0,j;
while(nr[i]==0) i++;
printf("%d",nr[i]);
for(i++;i<=cif;i++){
j=baza/10;
while(j>1 && nr[i]/j==0) {printf("0");j/=10;}
printf("%d",nr[i]);}
printf("\n");
}
int main()
{
freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%d",&n);
pow(n*n);
for(int k=2;k<=n;k++)
inm(k);
print();
fclose(stdout);
return 0;
}