Cod sursa(job #1915945)

Utilizator razvan99hHorhat Razvan razvan99h Data 8 martie 2017 23:14:01
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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_put2(int baza, int exp)
{
    int rez = 1;
    while(exp)
    {
        if(exp % 2 == 1)
            rez = 1ll * rez * baza % MOD;
        baza = 1ll * baza * baza % MOD;
        exp /= 2;
    }
    return rez;
}
int lg_put_rec(int baza, int exp)
{
    if(exp == 0) return 1;
    int aux = lg_put_rec(baza, exp / 2) % MOD;
    if(exp % 2 == 0)
        return (1ll * aux * aux) % MOD;
    else return ((1ll * baza * aux) % MOD * aux) % MOD;
}


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