Cod sursa(job #2785079)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 17 octombrie 2021 22:25:32
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
// 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;
}