Pagini recente » Cod sursa (job #3342419) | Cod sursa (job #2076819) | Cod sursa (job #2233450) | Cod sursa (job #1569352) | Cod sursa (job #3349982)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
long long a, n;
long long ExpoFast(long long a, long long p)
{
if(p == 0)
return 1;
if(p % 2 == 0)
{
long long rez = ExpoFast(a, p / 2) % n;
return (rez * rez) % n;
}
else
{
long long rez = ExpoFast(a, p / 2) % n;
return ((a * rez) % n * rez) % n;
}
}
int main()
{
fin >> a >> n;
long long f, p = n;
for(f = 2; f * f <= n; f++)
if(n % f == 0)
{
p *= (f - 1);
p /= f;
while(n % f == 0)
n /= f;
}
if(n != 1)
{
p *= (n - 1);
p /= n;
}
fout << ExpoFast(a, p - 1) % n << "\n";
return 0;
}