Pagini recente » Cod sursa (job #836152) | Cod sursa (job #1083341) | Cod sursa (job #586836) | Cod sursa (job #281112) | Cod sursa (job #937053)
Cod sursa(job #937053)
#include <fstream>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
int a,nn;
#define ll long long
int MOD;
int phi(int n)
{
int result=1;
for(int i=2;i*i<=n;++i)
{
int produs=1;
while (n%i==0)
{
n/=i;
produs*=i;
result*=(produs-(produs/i));
}
}
if (n>1) result*=(n-1);
return result;
}
inline int lp(int b)
{
if (b==1) return a%MOD;
if (b==0) return 1;
if (b%2) return (a*lp(b-1))%MOD;
return (lp(b/2)*lp(b/2))%MOD;
}
int invers (int a,int putere)
{
MOD=putere;
return lp(phi(putere)-1);
}
int main()
{
f>>a>>nn;
g<<invers(a,nn)<<'\n';
f.close();
g.close();
return 0;
}