Pagini recente » Cod sursa (job #2886869) | Cod sursa (job #2867618) | Cod sursa (job #1507376) | Cod sursa (job #2230294) | 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;
}