Cod sursa(job #2629796)

Utilizator RaduNichitaRadu Nichita RaduNichita Data 22 iunie 2020 17:39:43
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
// Copyright 2020 Nichita Radu <[email protected]>

#include <bits/stdc++.h>

#define MOD 1999999973

class Task {


    int N, P;
    long long res;
    void read_input() {
        std::ifstream fin("lgput.in");
        fin >> N;
        fin >> P;
        fin.close();
    }
    
    long long exponential (int n, int p) {
        if (p == 0) {
            return 1;
        }

        if (p % 2 == 0) {
            auto tmp = exponential(n, p / 2);
            return ((tmp % MOD) * (tmp % MOD) % MOD);
        } else {
            auto tmp = exponential(n, (p - 1 )/ 2);
            return ((n * (tmp % MOD) % MOD) * (tmp % MOD) % MOD);
        }
    }

    void get_result() {
        res = exponential(N, P);
    }

    void print_output() {
        std::ofstream fout("lgput.out");
        fout << res;
        fout.close();
    }

 public:
    void solve() {
        read_input();
        get_result();
        print_output();
    }
};

int main() {
    Task *task = new Task();
    task->solve();
    delete task;
    return 0;
}