Pagini recente » Cod sursa (job #1591374) | Cod sursa (job #261552) | Rating Ioana Tincu (Ioanaucnit) | Cod sursa (job #2053831) | Cod sursa (job #1290580)
#include<cstdio>
#include<fstream>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<bitset>
#include<deque>
#include<queue>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<unordered_map>
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
ll a, n, N, phi;
ll lgpow(ll a, ll b)
{
ll r = 1;
for(ll i = 1; i <= b; i <<= 1)
{
if(i & b) r = (r * a) % N;
a = (a * a) % N;
}
return r;
}
int main()
{
freopen("inversmodular.in", "r", stdin);
freopen("inversmodular.out", "w", stdout);
scanf("%lld%lld", &a, &n);
N = n;
phi = 1;
for(int i = 2; i * i <= n; i++)
if(n % i == 0)
{
while(n % i == 0)
{
phi *= i;
n /= i;
}
phi /= i;
phi *= (i - 1);
}
if(n > 1) phi *= (n - 1);
printf("%lld\n", lgpow(a, phi - 1));
return 0;
}