Cod sursa(job #1183728)

Utilizator crucerucalinCalin-Cristian Cruceru crucerucalin Data 10 mai 2014 00:31:45
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>

const int MOD = 1999999973;

unsigned long long exp_bit(int N, int P)
{
	unsigned long long a = N, ret = 1;
	unsigned i;

	for (i = 0; (1 << i) <= P; ++i) {
		if (((1 << i) & P) > 0)
			ret = (ret * a) % MOD;

		a = (a * a) % MOD;
	}

	return ret;
}

unsigned long long exp_recursive(int N, int P)
{
	if (!P)
		return 1;
	if (P == 1)
		return N;
	if (P % 2)
		return (N * exp_recursive(N*N, (P - 1)/2)) % MOD;
	else
		return exp_recursive(N*N, P/2) % MOD;
}

int main()
{
	FILE *fin = fopen("lgput.in", "r");
	FILE *fout = fopen("lgput.out", "w");

	unsigned int N, P;
	fscanf(fin, "%d %d", &N, &P);

	fprintf(fout, "%lld", exp_bit(N, P));

	fclose(fin);
	fclose(fout);
	return 0;
}