Cod sursa(job #1590681)

Utilizator BrandonChris Luntraru Brandon Data 5 februarie 2016 13:59:53
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>

#define MOD 1999999973

using namespace std;

ifstream cin ("lgput.in");
ofstream cout ("lgput.out");

long long n, p, current, ans, pow_sum;

void read() {
    cin >> n >> p;
}

long long lgput(long long n, long long p) {
    current = n;
    ans = 1;
    for(int i = 0; i < 32 and pow_sum < p; ++i) {
        if( (1 << i) & p) {
            pow_sum += (1 << i);
            ans *= current;
            ans %= MOD;
        }
        current *= current % MOD;
    }
    return ans;
}

int main() {
    read();
    cout << lgput(n, p) << '\n';
    return 0;
}