Pagini recente » Cod sursa (job #2034466) | Cod sursa (job #2321370) | Cod sursa (job #3192987) | Cod sursa (job #2851919) | Cod sursa (job #2785079)
// Mihai Priboi
#include <bits/stdc++.h>
#define MAXPOW (1 << 28)
void multiply( int a[], unsigned int b, int &na ) {
unsigned int r;
int i;
r = 0;
for( i = 0; i < na; i++ ) {
r += b * a[i];
a[i] = r % 10;
r /= 10;
}
while( r > 0 ) {
a[na++] = r % 10;
r /= 10;
}
}
int main() {
FILE *fin, *fout;
int n, i, p;
fin = fopen( "patrate2.in", "r" );
fscanf( fin, "%d", &n );
fclose( fin );
int a[4000];
int na;
a[0] = 1;
na = 1;
// n!
for( i = 2; i <= n; i++ )
multiply(a, i, na);
// 2^(n*n)
unsigned int x = 2;
p = n * n;
while( p ) {
if( (long long)x * x <= MAXPOW ) {
if( p % 2 == 1 )
multiply(a, x, na);
x *= x;
p /= 2;
}
else {
multiply(a, x, na);
p--;
}
}
fout = fopen( "patrate2.out", "w" );
for( i = na - 1; i >= 0; i-- )
fprintf( fout, "%d", a[i] );
fclose( fout );
return 0;
}