Cod sursa(job #1512164)

Utilizator M.AndreiMuntea Andrei Marius M.Andrei Data 27 octombrie 2015 19:03:31
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <fstream>
using namespace std;

ifstream f("lgput.in");
ofstream q("lgput.out");

const unsigned long long m=1999999973;

unsigned long long putere_la_ridicare(unsigned long long a, unsigned long long b)
{
    unsigned long long p;
    if (b==0){p=1;}
    else if (b==1){p=a%m;}
    else if (b%2==0){p=putere_la_ridicare((a%m)*(a%m)%m,b/2);}
    else {p=((a%m)*(putere_la_ridicare((a%m)*(a%m)%m,(b-1)/2))%m)%m;}
    return p;

}

int main()
{
    unsigned long long a,b;
    f>>a>>b;
    q<<putere_la_ridicare(a%m,b);
    f.close();
    q.close();
}