Pagini recente » Cod sursa (job #471574) | Istoria paginii runda/vv | Cod sursa (job #1636633) | Istoria paginii runda/aib-uuri_cex/clasament | Cod sursa (job #1867751)
#include <iostream>
#include <fstream>
using namespace std;
int indeuler(int n)
{
long long i, e;
e = n;
for (i=2; i*i<=n; i++)
if(n%i==0)
{
e=n*(i-1)/i;
while (n % i == 0)
n /= i;
}
if (n != 1)
e = e / n * (n - 1);
return e;
}
int akmodn(int a, int k, int n)
{
long long p=1;
while(k!=0)
{
if(k%2!=0)
p=p*a%n;
k /= 2;
a=a*a%n;
}
return p;
}
int main()
{
long long l, d, n, a, e;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
in>>a>>n;
e=indeuler(n);
out<<akmodn(a, e-1, n);
return 0;
}