Pagini recente » Cod sursa (job #1959063) | Cod sursa (job #591469) | Cod sursa (job #2596993) | Cod sursa (job #2523324) | Cod sursa (job #1284596)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
int phi(int n)
{
int lim=(int)sqrt((double)n);
int ans=n;
for(int i=2; i<=lim; i++)
{
bool ok=false;
while(n%i==0)
{
n/=i;
ok=true;
}
if(ok)
{
ans/=i;
ans*=(i-1);
lim=(int)sqrt((double)n);
}
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
int lgput(int n, int p, int mod)
{
long long x=n;
long long power=1;
for(unsigned int i=0; (1LL<<i)<=p; i++)
{
if(((1<<i)&p))
power=(power*x)%mod;
x=(x*x)%mod;
}
return power;
}
int Inv_mod(int a, int n) {
return lgput(a, phi(n)-1, n);
}
int main()
{
freopen("inversmodular.in", "r", stdin);
freopen("inversmodular.out", "w", stdout);
int a, n;
in >> a >> n;
out << Inv_mod( a, n ) << '\n';
return 0;
}