Cod sursa(job #1199601)

Utilizator cristinabCristina Brinza cristinab Data 19 iunie 2014 20:18:23
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.63 kb
/*
	Exponentiere rapida. Am N si P, calculez N^P modulo p, p prim.
*/

#define p 1999999973

#include <stdio.h>

long long exp_rapida(long long N, long long P) {
	if (P == 0) {
		return 1;
	} else if (P == 1) {
		return N % p;
	} else if (P % 2 == 1) {
		return ((N % p) * exp_rapida(((N % p) * (N % p)) % p, (P - 1) / 2)) % p;
	} else {
		return exp_rapida(((N % p) * (N % p)) % p, P / 2);
	}
}

int main() {
	long long N, P;
	FILE *in, *out;

	in = fopen("lgput.in", "r");
	out = fopen("lgput.out", "w");

	fscanf(in, "%llu", &N);
	fscanf(in, "%llu", &P);

	fprintf(out, "%llu\n", exp_rapida(N, P));

	fclose(in);
	fclose(out);

	return 0;
}