Pagini recente » Cod sursa (job #3364065) | Cod sursa (job #3363807) | Cod sursa (job #3364340) | Cod sursa (job #3364161) | Cod sursa (job #3364324)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lgput.in");
ofstream fout("lgput.out");
const int MOD = 1999999973;
int inmultire(int x, int y)
{
return (1LL * x * y) % MOD;
}
///// return baza ^ exp
//int ExponetiereRapida(int baza, int exp)
//{
// if(exp == 1)
// return baza;
//
// if(exp % 2 == 0)
// {
// int aux = ExponetiereRapida(baza, exp / 2);
// return aux * aux;
// }
// else
// return baza * ExponetiereRapida(baza, exp - 1);
//}
/// return baza ^ exp
int ExponetiereRapida(int baza, int exp)
{
if(exp == 1)
return baza;
if(exp % 2 == 0)
{
int aux = ExponetiereRapida(baza, exp / 2);
return inmultire(aux, aux);
}
else
return inmultire(ExponetiereRapida(baza, exp - 1), baza);
}
int main()
{
int x, p;
fin >> x >> p;
int raspuns = 1;
/*
/// Solutia Bruta: Complexitate: O(P)
for(int i = 1; i <= p; i++)
raspuns = 1LL * (1LL * raspuns * x) % MOD;
fout << raspuns;
*/
/// Exponentiere rapida: Complexitate O(log N)
/// Versiune recursiva
fout << ExponetiereRapida(x, p);
return 0;
}