Cod sursa(job #2898421)

Utilizator David0911David Teregovan David0911 Data 6 mai 2022 17:58:48
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

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

const int modulo = 1999999973;

long long n, e;
long long lgput(long long x, long long y)
{
    long p = 1;
    /*
    2 5


    5 = 4 + 1 => 101

    pas 1:
    y = 5 / 2 = 2 rest 1 -> puterea actuala conteaza la rezultat, deci facem rezultat = rezultat * putere actuala
    x = 2;

    puterea actuala merge la urmatorul exponent: x = x * x
    pas 2:
    y = 2 / 2 = 1 rest 0 -> puterea actuala nu conteaza la rezultat
    x = 4

    pas 3:
    y = 1 / 2 = 0 rest 1 -> puterea actuala conteaza la rezultat
    */
    while(y)
    {
        if(y % 2 == 1)
        {
            p = (p * x) % modulo;
        }
        y = y / 2;
        x = (x * x) % modulo;

    }
    return p%modulo;
}
int main()
{
    fin >> n >> e;
    fout << lgput(n, e);
    return 0;
}

/*

a ^ 35 = a ^ 1 + 2 + 32 = a ^ 1 * a ^ 2 * a ^ 32

*/

/*
35 -> baza 10


*/


/*
a * a * a * * ... * a 35 ori

a * a^ 2 * a^32
*/