Cod sursa(job #1915817)

Utilizator razvan99hHorhat Razvan razvan99h Data 8 martie 2017 22:37:24
Problema Ridicare la putere in timp logaritmic Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
#define MOD 1999999973
using namespace std;
ifstream fin("lgput.in");
ofstream fout("lgput.out");

int lg_put(int baza, int exp) // ridicare la putere in timp logaritmic cu op pe biti
{
    int rez = 1;
    for(int bit = 1; bit <= exp; bit <<= 1)
    {
        if(exp & bit)
            rez = 1ll * rez * baza % MOD;
        baza = 1ll * baza * baza % MOD;
    }
    return rez;
}
int lg_put_recursiv(int baza, int exp)
{
    if(exp == 0) return 1;
    if(exp == 1) return baza;
    int aux = lg_put(baza, exp / 2);
    if(exp % 2 == 0)
        return (1ll * aux * aux) % MOD;
    else return ((1ll * baza * aux * aux) % MOD ) % MOD;
}


int main()
{
    int n, p;
    fin >> n >> p;
    fout << lg_put_recursiv(n,p);
    return 0;
}