Cod sursa(job #2250709)

Utilizator vladm98Munteanu Vlad vladm98 Data 30 septembrie 2018 16:35:00
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

long long MOD = 1999999973;


//Complexitate O(b)
long long powerBrute (long long a, long long b) {
    long long rez = 1;
    for (long long i = 1; i <= b; ++i) {
        rez = (rez * a) % MOD;
    }
    return rez;
}

long long powerOptim (long long a, long long b) {
    long long rez = 1;
    while (b != 0) {
        if (b % 2 == 0) {
            a = (a * a) % MOD;
            b = b / 2;
        }
        else {
            rez = (rez * a) % MOD;
            a = (a * a) % MOD;
            b = (b - 1) / 2;
        }
    }
    return rez;
}

int main()
{
    ifstream fin ("lgput.in");
    ofstream fout ("lgput.out");
    long long a, b;
    fin >> a >> b;
    fout << powerOptim(a, b);
    return 0;
}