Cod sursa(job #841847)

Utilizator Brz_VladBrezae Vlad Brz_Vlad Data 25 decembrie 2012 10:43:14
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.57 kb
#include <stdio.h>

typedef unsigned long long int64;

const int64 I = 1999999973;


int N;
int64 rest;

int SqrModI(int x)
{
	int64 tmp = (int64)x * (int64)x;
	tmp = tmp % I;
	return (int)tmp;
}

int GetRest(int P)
{
	if( P == 1 )
		return N%I;
	else if( P%2 == 1 ){
		int64 rez = N%I;
		rez = rez * SqrModI(GetRest(P/2));
		rez = rez % I;
		return (int)rez;	
	}
	else
		return SqrModI(GetRest(P/2));
}

int main(int argc, char* argv[])
{
	freopen("lgput.in","r",stdin);
	freopen("lgput.out","w",stdout);
	
	int P;
	scanf("%d %d",&N,&P);
	
	printf("%d", GetRest(P));
	return 0;
}