Pagini recente » Cod sursa (job #2292491) | Cod sursa (job #953517) | Cod sursa (job #1869301) | Cod sursa (job #516559) | Cod sursa (job #2467832)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
int LogP(int a,int n,int MOD)
{
int p=1;
while(n>0)
{
if(n%2==1) p=1LL*p*a%MOD;
n/=2;
a=1LL*a*a%MOD;
}
return p;
}
/**
Phi(n)=n*(p1-1)*(p2-1)*...*(pk-1)/(p1*p2*...*pk)
unde p1...pk = factorii lui n
12=2^2*3^1
Phi(12)=12*(2-1)*(3-1)/(2*3)=4
*/
int Phi(int n)
{
int sol=n,p;
for(p=2;p*p<=n and n>1;p++)
{
if(n%p==0)
sol=sol/p*(p-1);
while(n%p==0)
n/=p;
}
if(n>1)
sol=sol/n*(n-1);
return sol;
}
int main()
{
int a,phi,n;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
fin>>a>>n;
phi=Phi(n);
fout<<LogP(a,phi-1,n)<<"\n";
fin.close();
fout.close();
return 0;
}