Cod sursa(job #583471)

Utilizator truenighttruenight truenight Data 20 aprilie 2011 15:19:38
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.62 kb
#include <stdio.h>

#define MOD 1999999973
#define IN "lgput.in"
#define OUT "lgput.out"

static unsigned long n;

static unsigned long long lgput(unsigned long);

int main(void) {

    unsigned long e;

    (void) freopen(IN, "r", stdin);
    (void) freopen(OUT, "w", stdout);

    (void) scanf("%lu %lu", &n, &e);

    printf("%llu\n", lgput(e));
    return 0;
}

unsigned long long lgput(unsigned long e) {

    unsigned long long x;

    if(e == 1) return n;
    else if(e & 1) 
        return (lgput(e >> 1) % MOD) * (lgput(e >> 1) % MOD) * (n % MOD);
    else
        return (lgput(e >> 1) % MOD) * (lgput(e >> 1) % MOD);
}