Pagini recente » Cod sursa (job #3236947) | Cod sursa (job #3349659) | Cod sursa (job #2295513) | Cod sursa (job #1755307) | Cod sursa (job #3305213)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int a, mod;
int lgput(int a, int n)
{
if(n == 0)
{
return 1;
}
else if(n % 2 == 0)
{
int val = lgput(a, n / 2);
return (val * val) % mod;
}
else if(n % 2 == 1)
{
return (a * lgput(a, n - 1)) % mod;
}
}
int getphi(int n){
int cur = n;
for(int i = 2; i * i <= n; i++)
{
if(n % i == 0)
{
while(n % i == 0)n /= i;
cur = (cur / i) * (i - 1);
}
}
if(n != 1)cur = (cur / n) * (n - 1);
return cur;
}
signed main()
{
fin >> a >> mod;
fout << lgput(a, getphi(mod) - 1);
return 0;
}