Pagini recente » Cod sursa (job #1062890) | Cod sursa (job #3123743) | Cod sursa (job #1966548) | Cod sursa (job #2969428) | Cod sursa (job #2900852)
#include <bits/stdc++.h>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
#define int long long
int a,n;
int lgput(int put)
{
int pt = 1;
while (put != 0)
{
if (put % 2 == 1)
pt = pt * a % n;
a = a * a % n;
put /= 2;
}
return pt % n;
}
int get_fi()
{
int p = n,nr = n;
for (int i = 2; i * i <= n; i++)
while (n % i == 0)
p = p / i * (i - 1),n /= i;
if (n != 1)
p = p / n * (n - 1);
n = nr;
return p;
}
signed main()
{
in >> a >> n;
int put = get_fi() - 1;
out << lgput(put);
return 0;
}