Pagini recente » Cod sursa (job #657158) | Cod sursa (job #758456) | Cod sursa (job #2202379) | Schimbarea compilatoarelor Borland la OJI | Cod sursa (job #2450414)
//ALEX ENACHE
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
using namespace std;
//-----------------------------------------------------------------
#include <fstream>
//ifstream cin("input"); ofstream cout("output");
ifstream cin("inversmodular.in"); ofstream cout("inversmodular.out");
long long lgput(long long a, long long b, long long MOD) {
long long ret = 1LL;
while (b) {
if (b & 1LL) ret = (ret * a) % MOD;
a = (a * a) % MOD;
b >>= 1LL;
}
return (ret % MOD);
}
long long phi(long long nr) {
long long ans = nr;
for (long long i = 2; i * i <= nr; i++) {
if (nr % i) {
continue;
}
while (nr % i == 0) {
nr /= i;
}
ans /= i;
ans *= (i - 1LL);
}
if (nr > 1){
ans /= nr;
ans *= (nr - 1LL);
}
return ans;
}
long long inv_mod(long long x, long long MOD) {
return lgput(x, phi(MOD) - 1, MOD);
}
int main() {
long long a, b;
cin >> a >> b;
cout << inv_mod(a, b);
return 0;
}