Cod sursa(job #629216)
Utilizator | Marius Stroe Marius | Data | 2 noiembrie 2011 21:16:43 |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.43 kb |
#include <cstdio>
using namespace std;
typedef long long i64;
const i64 Modulo = 1999999973;
i64 go(i64 n, i64 p) {
i64 r = 1;
for (i64 i = 31; i >= 0; -- i) {
r = (r * r) % Modulo;
if ((p >> i) & 1)
r = (r * n) % Modulo;
}
return r;
}
int main(void) {
i64 n, p;
fscanf(fopen("lgput.in", "r"), "%lld %lld", &n, &p);
fprintf(fopen("lgput.out", "w"), "%lld", go(n, p));
return 0;
}