Cod sursa(job #1059973)

Utilizator impulseBagu Alexandru impulse Data 17 decembrie 2013 12:46:20
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.63 kb
//
//  main.c
//  lgput
//
//  Created by Alexandru Bâgu on 12/17/13.
//  Copyright (c) 2013 Alexandru Bâgu. All rights reserved.
//

#include <stdio.h>

int lgpow(int n, int p, int mod)
{
    if(p < 0) return lgpow(n, -p, mod);
    if(p == 0) return 1;
    if(p == 1) return n;
    if(p&1) return (n * lgpow(n*n, (p^1)>>1, mod)) % mod;
    else return lgpow(n*n, p>>1, mod) % mod;
}

int main(int argc, const char *argv[])
{
    freopen("lgput.in", "r", stdin);
    freopen("lgput.out", "w", stdout);
    
    const int mod = 1999999973;
    int n, p;
    scanf("%d %d", &n, &p);
    printf("%d\n", lgpow(n, p, mod));
    
    return 0;
}