Cod sursa(job #1502253)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 14 octombrie 2015 14:09:49
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
# include <cstdio>
# define MOD 1999999973

using namespace std;

long long n, p;

long long doit(long long n, long long p) {
    if (p < 0) doit(1/n, p * (-1)) % MOD;
        else if (p == 0) return 1 % MOD;
        else if (p == 1) return n % MOD;
        else if (p % 2 == 0) return doit((n * n) % MOD, p / 2) % MOD;
        else if (p % 2 == 1) return n * doit((n * n) % MOD, (p - 1) / 2) % MOD;
}

int main ()

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

    scanf("%lld %lld\n", &n, &p);

    printf("%d", doit(n, p));

    return 0;
}