Cod sursa(job #1602793)

Utilizator andreibotilaBotila Andrei andreibotila Data 16 februarie 2016 22:15:21
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.64 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;
	int Y = 1;
	while(P > 1){
		if(P % 2 == 0){
			N = N * N;
			P = P / 2;
		}
		else{
			Y = N * Y;
			N = N * N;
			P = (P - 1) / 2;
		}
	}
	return N * Y;
}

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

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

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

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

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