Cod sursa(job #2214962)

Utilizator dia.ionescuIonescu Diana dia.ionescu Data 20 iunie 2018 16:48:24
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin ("lgput.in");
ofstream fout ("lgput.out");

#define NR 1999999973

long long putere(long long x, long long y, long long p) {
    if (p == 0)
        return x % NR;
    if (p == 1)
        return (x * y) % NR;
    if (p % 2 == 0)
        return putere((x * x) % NR, y % NR, p / 2);
    if (p % 2 == 1)
        return putere((x * x) % NR, (x * y) % NR, (p - 1) / 2);
}
int main()
{
    long long x, y = 1, N, P;
    fin >> N >> P;
   /* x = N;
    for (i = 0; (1 << i) <= P; i++) {
        if ((1 << i) & P)
            y = y * x;
        x = x * x;
    }*/
    if (P == 0)
        fout << 1;
    else
        fout << putere(N,1,P);
}