Cod sursa(job #2144415)

Utilizator DanielznaceniDaniel Danielznaceni Data 26 februarie 2018 18:53:59
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include <fstream>
#define prim 1999999973
using namespace std;
ifstream in("lgput.in");
ofstream out("lgput.out");
long long a, b, im=1;
int main()
{
    in>>a>>b;
    if(b==0 || a==0)
        out<<1;
    else if(b==1)
        out<<a%prim;
    else
    {
        while(b>1)
        {
            if(b%2==0)
            {
                a=a*a;
                a=a%prim;
                b=b/2;
                b=b%prim;
            }
            else
            {
                im=im*a;
                im=im%prim;
                a=a*a;
                a=a%prim;
                b=(b-1)/2;
            }
        }
        out<<(im%prim*a%prim)%prim;
    }
}