Pagini recente » Cod sursa (job #3349997) | Cod sursa (job #956093) | Cod sursa (job #1328429) | Cod sursa (job #3305902) | Cod sursa (job #3310095)
//#include <iostream>
#include <fstream>
#include <set>
#include <queue>
#define int long long
using namespace std;
ifstream cin("lgput.in");
ofstream cout("lgput.out");
int n, p;
const int mod = 1999999973;
int ridica(int n, int p) {
if(p == 0)
return 1;
int half = ridica(n, p/2);
if(p % 2 == 0)
return half * half % mod;
else
return half * half % mod * n % mod;
}
int ridicaIterativ(int n, int p) {
// 2 ^ 7
// 7 = 111
// 7 = 4 + 2 + 1
// 2
// 4
// 16
int rez = 1, a = n;
while(p > 0) {
int ultimulBit = p % 2;
if(ultimulBit == 1) {
rez *= a;
rez %= mod;
}
a = a * a;
a = a % mod;
p /= 2;
}
return rez;
}
signed main()
{
cin >> n >> p;
cout << ridicaIterativ(n, p);
return 0;
}