Pagini recente » Cod sursa (job #341316) | Cod sursa (job #809692) | Cod sursa (job #2651715) | Cod sursa (job #57164) | Cod sursa (job #1357654)
#include <fstream>
#include <stack>
using namespace std;
ifstream is ("inversmodular.in");
ofstream os ("inversmodular.out");
long long a, MOD, x;
long long POW(long long A, long long B);
long long InvMod(long long A, long long B);
long long getphi(long long nr);
int main()
{
is >> a >> MOD;
MOD = getphi(MOD) + 1;
os << POW(a, MOD-2);
is.close();
os.close();
return 0;
}
long long POW(long long A, long long B)
{
stack <int> S;
long long aux = B;
for (; aux; aux /= 2) S.push(aux % 2);
for (aux = 1; !S.empty(); S.pop())
{
aux = ( 1LL * aux * aux) % MOD;
if (S.top() == 1) aux = (1LL * aux * A) % MOD;
}
return aux % MOD;
};
long long getphi(long long nr)
{
long long cur = nr;
for(long long i = 2;i * i <= nr; ++i)
{
if (nr % i == 0)
{
while(nr % i == 0)nr /= i;
cur = (cur / i) * (i - 1);
}
}
if (nr != 1) cur = cur / nr * (nr - 1);
return cur;
};