Cod sursa(job #1590681)
| Utilizator | Data | 5 februarie 2016 13:59:53 | |
|---|---|---|---|
| Problema | Ridicare la putere in timp logaritmic | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.6 kb |
#include <fstream>
#define MOD 1999999973
using namespace std;
ifstream cin ("lgput.in");
ofstream cout ("lgput.out");
long long n, p, current, ans, pow_sum;
void read() {
cin >> n >> p;
}
long long lgput(long long n, long long p) {
current = n;
ans = 1;
for(int i = 0; i < 32 and pow_sum < p; ++i) {
if( (1 << i) & p) {
pow_sum += (1 << i);
ans *= current;
ans %= MOD;
}
current *= current % MOD;
}
return ans;
}
int main() {
read();
cout << lgput(n, p) << '\n';
return 0;
}
