Cod sursa(job #1850685)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 18 ianuarie 2017 20:33:47
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("lgput.in");
ofstream fout("lgput.out");

const int MOD = 2e9 - 27;

namespace utils {
    template <typename _type>
    inline int product(_type first) {
        return first;
    }

    template <typename _type, typename... _args>
    inline int product(_type first, _args... args) {
        return (1LL * first * utils::product(args...)) % MOD;
    }

    inline int pow(int a, int b) {
        if (b == 0) {
            return 1;
        }
        int half = pow(a, b / 2);
        if (b % 2) {
            return product(half, half, a);
        }
        return product(half, half);
    }
}

int a, b;

int main() {
    fin >> a >> b;
    fout << utils::pow(a, b) << '\n';
    return 0;
}