Pagini recente » Cod sursa (job #1426724) | Cod sursa (job #738421) | Cod sursa (job #460506) | Rating Ibraim Yasin (Yasin_ibraim) | Cod sursa (job #3299676)
#include <iostream>
#include <fstream>
#define m 1999999973
using namespace std;
// Fast modular exponentiation
long long mod_pow(long long base, long long exp) {
long long result = 1;
base %= m;
while (exp > 0) {
if (exp % 2 == 1)
result = (result * base) % m;
base = (base * base) % m;
exp /= 2;
}
return result;
}
// Modular inverse using Fermat's little theorem (only if m is prime)
long long mod_inverse(long long n) {
return mod_pow(n, m - 2);
}
long long exp_log(long long n, int p) {
if (p < 0) {
return mod_pow(mod_inverse(n), -p); // n^(-p) ≡ (n^(-1))^p mod m
} else {
return mod_pow(n, p);
}
}
int main() {
long long n;
int p;
// Use freopen for file input/output
freopen("lgput.in", "r", stdin);
freopen("lgput.out", "w", stdout);
cin >> n >> p;
cout << exp_log(n, p) << endl;
return 0;
}