Cod sursa(job #2028035)

Utilizator rangal3Tudor Anastasiei rangal3 Data 27 septembrie 2017 00:07:05
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#define in "lgput.in"
#define out "lgput.out"
#define mod 1999999973
using namespace std;

ifstream fin(in);
ofstream fout(out);

typedef unsigned long long ull;

inline ull ridlog_rec(ull n,ull p)
{
    if(p < 2) return n;

    ull R = ridlog_rec(n,p/2);
    if(R == 0) R = 1;

    if(p%2 == 0)
    {
        return (R*R)%mod;
    }
    return (((R*R)%mod)*n)%mod;

}

ull ridlog(ull n,ull p)
{
    ull rez = 1;

    while(p!=0)
    {
        if(p%2) rez = (rez*n)%mod;
        p = p>>1;
        n = (n*n)%mod;
    }
    return rez;
}


int main()
{
    ull n,p;
    fin>>n>>p;
    fout<<ridlog(n,p);

    fin.close(); fout.close();
    return 0;
}