Pagini recente » Cod sursa (job #242350) | Cod sursa (job #1364885) | Cod sursa (job #656541) | Cod sursa (job #2422931) | Cod sursa (job #1342335)
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
typedef unsigned long long int64;
int64 logarithmicExponential(int64 n, int64 k, int modulo)
{
int i = 0;
int64 p = k;
// find where the MSB of k is positioned
for(i=63; i>=0; i--)
{
int64 mask = ((int64)1 << i);
if((k & mask) > 0)
{
break;
}
}
int maxPow = i;
int64 partialResult = 1;
int64 finalResult = 1;
for(i=0; i<=maxPow; i++)
{
int64 mask = ((int64)1 << i);
if(i==0)
{
partialResult = n;
}
else
{
partialResult *= partialResult;
}
if(modulo != 0)
{
partialResult %= modulo;
}
if(k & mask)
{
finalResult *= partialResult;
}
if(modulo != 0)
{
finalResult %= modulo;
}
}
return finalResult;
}
int main()
{
freopen("lgput.in", "r", stdin);
freopen("lgput.out", "w", stdout);
int n, p;
scanf("%d %d", &n, &p);
int64 res = logarithmicExponential((int64)n, (int64)p, 1999999973);
printf("%llu\n", res);
return 0;
}