Cod sursa(job #664627)

Utilizator luca.boieruBoieru Luca luca.boieru Data 20 ianuarie 2012 15:23:21
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.49 kb
#include <cstdio>

int v[100];

int main(){
	
	freopen("lgput.in", "r", stdin);
	freopen("lgput.out", "w", stdout);
	
	int a, b;
	
	scanf("%d %d", &a, &b);
	
	int bb = b, k;
	
	for(int i = 1;bb; ++ i){
		v[i] = bb % 2;
		bb /= 2;
		k = i;
	}
	unsigned long long  p = 1;
	
	for(int i = k; i >= 1; --i){
		if(v[i]){
			p = (p * p) % 1999999973 * a;
			p %= 1999999973;
		}
		else{
			p = (p * p) % 1999999973;
			p %= 1999999973;
		}
	}
	printf("%lld",p);
	
	return 0;
}