Pagini recente » Cod sursa (job #1308903) | Cod sursa (job #2128301) | Cod sursa (job #2651500) | Cod sursa (job #1261681) | Cod sursa (job #3245132)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
/**
2 ^ 27 = 2 ^ 1 + 2 ^ 2 + 2 ^ 8 + 2 ^ 16
43210
27 = 16 + 8 + 2 + 1 = 11011
*/
int ExpoLog(int a, int n, int mod)
{
int p = 1;
while(n > 0)
{
if(n % 2 == 1) p = 1LL * p * a % mod;
n /= 2;
a = 1LL * a * a % mod;
}
return p;
}
int Phi(int n)
{
int d, e, p = n;
for(d = 2; d * d <= n; d++)
if(n % d == 0)
{
e = 0;
while(n % d == 0)
{
e++;
n = n / d;
}
if(e > 0) p = p / d * (d - 1);
}
if(n > 1) p = p / n * (n - 1);
return p;
}
int main()
{
int a, n;
fin >> a >> n;
fout << ExpoLog(a, Phi(n) - 1, n) << "\n";
return 0;
}