Pagini recente » Cod sursa (job #234998) | Cod sursa (job #3228597) | Cod sursa (job #223242) | Cod sursa (job #3236611) | Cod sursa (job #3279369)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("inversmodular.in");
ofstream g ("inversmodular.out");
int phi (int n)
{
int phiN = n;
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0) ///atunci i este prim
{
phiN = phiN / i * (i - 1);
while (n % i == 0)
{
n /= i;
}
}
}
if (n > 1)
{
phiN = phiN / n * (n - 1);
}
return phiN;
}
int exponRapida (int a, int p, int mod)
{
int rez = 1;
while (p != 0)
{
if (p % 2 == 1)
{
rez = rez * 1LL * a % mod;
}
a = 1LL * a * a % mod;
p = p / 2;
}
return rez;
}
int main()
{
int A, N;
f >> A >> N;
g << exponRapida (A, phi (N) - 1, N);
return 0;
}