Cod sursa(job #3191704)

Utilizator cristian_vergelea@yahoo.comVergelea Gabriel Cristian [email protected] Data 10 ianuarie 2024 13:44:54
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;

const int MOD = 1999999973;

// Recursiv:
int logPow(int n, int a) {
    if(a == 0) {
        return 1;
    }
    int x = logPow(n, a / 2);
    int x_a = (1LL * x * x) % MOD;
    if(a % 2 == 0) {
        return x_a;
    }
    return (1LL * x_a * n) % MOD;
}

// Iterativ:
int logPow2(int n, int a) {
    int sol = 1;
    while(a > 0) {
        if(a % 2 == 1) {
            sol = (1LL * sol * n) % MOD;
            a--;
        }
        sol = (1LL * sol * sol) % MOD;
        a /= 2;
    }
    return sol;
}

int main() {
    int n, a;
    ifstream fin("lgput.in");
    ofstream fout("lgput.out");
    fin >> n >> a;
    fout << logPow2(n, a);
    return 0;
}