Cod sursa(job #1602811)

Utilizator andreibotilaBotila Andrei andreibotila Data 16 februarie 2016 22:26:11
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>

long long exprapid(long long N, long long P){
	if(P < 0) {
		N = 1 / N;
		P = -P;
	}
	if(P == 0) return 1;
	long long Y = 1;
	while(P > 1){
		if(P % 2 == 0){
			N = (N * N) % 1999999973;
			P = P / 2;
		}
		else{
			/*Y = N * Y;
			N = N * N;
			P = (P - 1) / 2;*/
			Y = (Y * N) % 1999999973;
			P = P - 1;
		}
	}
	return Y;
}

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

	long long rest = 0, /*result = 0,*/ N, P;//, divisor;
	//divisor = 1999999973;
	fscanf(in, "%lld %lld", &N, &P);

	printf("N = %lld P = %lld\n", N, P);

	rest = exprapid(N, P);
	//printf("result  = %lld\n", result);
	//rest = result % divisor;

	fprintf(out, "%lld\n", rest);
	fclose(in);
	fclose(out);
	return 0;
}