Cod sursa(job #2586581)

Utilizator dariusandreicotaeCotae Darius Andrei dariusandreicotae Data 21 martie 2020 10:45:39
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.42 kb
#include<stdio.h>
#include<limits.h>
#define M	1999999973

int main()
{
unsigned long long int n,p,x,i,y;
freopen("lgput.in","r",stdin);
freopen("lgput.out","w",stdout);
scanf("%llu%llu",&x,&n);
y=1UL;p=1UL;
n%=M;
x%=M;
//for(i=1;i<=p;i++) x*=n;
while(p<=n) p*=2;

do	{
	p/=2;
	y*=y;
	y%=M;
	if(n>=p){
		n-=p;
		y=y*x;
		y=y%M;
		}
	}while(p>1);
if(!y) y=ULONG_MAX;
printf("%llu",y%M);
return 0;
}