Cod sursa(job #3219487)

Utilizator MagicantPlusIuoras Andrei MagicantPlus Data 31 martie 2024 15:13:30
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

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

const long long MOD = 1999999973ll;
long long power(long long base, long long exp);

int main()
{
    long long n, p;

    fin >> n >> p;

    fout << power(n, p);

    return 0;
}

long long power(long long base, long long exp)
{
    if(base == 0)
        return 0;
    else if(base == 1)
        return 1;
    else if(exp == 0)
        return 1;
    else if(exp == 1)
        return base;

    long long result = 1, basePow = base;

    while(exp)
    {
        if(exp & 1)
            result = result * basePow % MOD;

        basePow = basePow * basePow % MOD;
        exp >>= 1;
    }

    return result;
}