Pagini recente » Cod sursa (job #225384) | Cod sursa (job #344227)
Cod sursa(job #344227)
#include <stdio.h>
#include <string.h>
#define NR 10000
#define P 1<<14
int n,rez[P],exp,p[P],rez2[P];
void mul(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= NR)
A[i] = (t += A[i] * B) % NR;
A[0] = i - 1;
}
void mul2(int A[], int B[])
{
int i, j, t, C[P];
memset(C, 0, sizeof(C));
for (i = 1; i <= A[0]; i++)
{
for (t=0, j=1; j <= B[0] || t; j++, t/=NR)
C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%NR;
if (i + j - 2 > C[0]) C[0] = i + j - 2;
}
memcpy(A, C, sizeof(C));
}
void factorial()
{
rez[0]=1;
rez[1]=1;
int i;
for (i=2; i<=n; i++)
mul(rez,i);
}
void putere_2()
{
p[0]=1;
p[1]=2;
while (exp)
{
if (exp%2)
mul2(rez,p);
mul2(p,p);
exp/=2;
}
}
int nrcif(int x)
{
int salv=x,cont=0;
while (salv)
{
cont++;
salv/=10;
}
return cont;
}
void afisare()
{
int i,j,y;
for (i=rez[0]; i>=1; i--)
{
if (i!=rez[0])
{
y=nrcif(rez[i]);
for (j=1; j<=4-y; j++)
printf("0");
}
printf("%d",rez[i]);
}
}
int main()
{
freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%d",&n);
exp=n*n;
factorial();
putere_2();
afisare();
return 0;
}