Pagini recente » Cod sursa (job #2447629) | Cod sursa (job #1008638) | Cod sursa (job #899158) | Cod sursa (job #1997763) | Cod sursa (job #3255226)
#include <iostream>
#include <fstream>
#define ll long long
#define LL long long
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
ll calc(ll x)
{
ll nr = x;
for(ll i=2 ; i * i <= x ; i++)
{
if (x % i == 0)
{
while(x % i == 0)
x/=i;
nr=(nr / i) * (i - 1);
}
}
if(x!=1)
nr = nr / x * (x - 1);
return nr;
}
LL getphi(LL nr)
{
LL cur = nr;
for(LL 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;
}
int main()
{
ll phi , m , a , n , sol=1;
fin >> a >> n;
m = calc(n) - 1;
cout<<m;
phi = getphi(n) - 1;
cout<<" "<<phi;
while(m)
{
if(m % 2)
sol = sol * a % n;
a = a * a % n;
m/=2;
}
fout<<sol;
return 0;
}