Cod sursa(job #635668)

Utilizator nandoLicker Nandor nando Data 19 noiembrie 2011 14:01:54
Problema Ciuperci Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.84 kb
#include <cstdio>
using namespace std;

#define MOD 66601300000LL

FILE* fin = fopen("ciuperci.in", "r");
FILE* fout = fopen("ciuperci.out", "w");

typedef long long int64;

int64 num(int64 a)
{
	if (a <= 1) {
		return 1;	
	}
	
	if (!(a & (a - 1))) {
		return a;	
	}
	
	if (!(a & (a + 1))) {
		return 1;	
	}
	
	if (a & 1) {
		int64 k = num(a >> 1);
		return (k * k) % MOD;	
	} else {
		int64 first = num(a >> 1);
		int64 second = num((a >> 1) - 1);
		
		return ((first * second) % MOD << 1) % MOD;
	}
}

int main()
{
	int t;
	fscanf (fin, "%d\n", &t);
	
	for (int i = 0; i < t; ++i) {
		int64 a;
		fscanf (fin, "%lld", &a);
		
		for (int i = 10; i >= 0; --i) {
			fprintf (fout, "%d", bool(a & (1 << i)));	
		}
		
		fprintf (fout, " %lld %lld\n", a, num(a));	
	}
	
	fclose(fin);
	fclose(fout);
	return 0;
}