Pagini recente » Cod sursa (job #442042) | Cod sursa (job #1103376) | Cod sursa (job #1791918) | Cod sursa (job #2406189) | Cod sursa (job #168731)
Cod sursa(job #168731)
#include<cstdio>
#include<cstring>
const int baza=10000;
const int cif=1000;
int nr[cif+1],aux[cif+1],i,j,n,x;
inline void patrat()
{
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;}
}
inline void inm(int a)
{
int i;
for(i=cif;i>=0;i--)
nr[i]*=a;
for(i=cif;i>0;i--){
nr[i-1]+=nr[i]/baza;
nr[i]%=baza;}
}
void pow(int n)
{
if(n==0) {
nr[cif]=1;
return;}
pow(n/2);
patrat();
memcpy(nr,aux,sizeof(nr));
if(n%2) x++;
}
void print()
{
i=0;
while(!nr[i]) i++;
printf("%d",nr[i]);
i++;
for(;i<=cif;i++){
j=baza/10;
while(j>1 && nr[i]/j==0) {printf("0");j/=10;}
printf("%d",nr[i]);}
}
int main()
{
freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%d",&n);
pow(n*n);
if(x) inm(1<<x);
for(i=2;i<n;i+=2)
inm(i*(i+1));
if(i==n) inm(n);
print();
}