Cod sursa(job #1453596)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 23 iunie 2015 22:21:54
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.6 kb
#include <stdio.h>
#define R 1999999973
#define MAX 50

int put(int n, int p);

int main(){
	freopen("lgput.in", "r", stdin);
	freopen("lgput.out", "w", stdout);
	int n, p;
	scanf("%d%d", &n, &p);
	printf("%d\n", put(n, p));
	return 0;
}

int put(int n, int p){
	long long v[MAX], rez = 1;
	int aux, t, princ = p;
	v[0] = n % R;
	aux = princ;
	t = 0;
	while(aux > 1){
		aux /= 2;
		++t;
		v[t] = (v[t - 1] * v[t - 1]) % R;
	}

	princ -= 1<<t;
	rez = (rez * v[t]) % R;
	while(princ > 0){
		t = 0;
		aux = princ;
		while(aux > 1){
			aux /= 2;
			++t;
		}
		princ -= 1<<t;
		rez = (rez * v[t]) % R;
	}
	return rez;
}