Cod sursa(job #2281183)

Utilizator ZappaManIosif Adrian-Mihai ZappaMan Data 11 noiembrie 2018 17:08:48
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.53 kb
#include <iostream>

using namespace std;

int N, P;

const long long R = 1999999973;

typedef long long ll;

ll logp(long long n, long long p) {
   if (p == 0) {
      return 1;
   }
   if (p == 1) {
      return n % R;
   }

   if (p & 1) {
      return ((n % R) * logp(((n % R) * (n % R)) % R, (p-1) / 2)) % R;
   }

   return logp(((n % R) * (n % R)) % R, p / 2) % R;
}

int main() {
   freopen("lgput.in", "r", stdin);
   freopen("lgput.out", "w", stdout);

   scanf("%d %d", &N, &P);

   printf("%lld", logp(N, P));

   return 0;
}