Cod sursa(job #2225504)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 27 iulie 2018 13:12:45
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <stdio.h>

using namespace std;
const long long MOD = 1999999973;
unsigned int n,p;

long long ridica(long long x, long long y)
{
    if(y < 0) return ridica(1/x % MOD,-y) % MOD;
    else if(y == 0) return 1;
    else if(y == 1) return x % MOD;
    else if(y & 1) return x % MOD * ridica(x % MOD* x % MOD ,(y-1) / 2) % MOD;
    else return ridica(x % MOD*x % MOD,y/2) % MOD;
}

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

    scanf("%d %d\n",&n,&p);
    long long x = ridica(n,p);
    printf("%lld\n", x);
}