Pagini recente » Istoria paginii utilizator/andreii_93 | Cod sursa (job #1586136) | Istoria paginii probleme-de-acoperire-2 | Cod sursa (job #2843721) | Cod sursa (job #1521000)
#include <fstream>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
int a,n,p,i,l,c;
long long pow,ans;
int main()
{
f>>a>>n;
l=n;
p=1;
if (n%2==0)
{
n/=2;
while(n%2==0)
n/=2,p*=2;
}
for (i=3;i*i<=n;i+=2)
if (n%i==0){
n/=i;
p*=(i-1);
while(n%i==0)
n/=i,p*=i;
}
if (n>1)
p*=(n-1),n=1;
p--;
ans=1;
pow=a%l;
for (i=0;(1<<i)<=p;i++)
{
if (p & (1<<i))
ans=((ans%l)*(pow%l))%l;
pow=((pow%l)*(pow%l))%l;
}
g<<ans<<' ';
return 0;
}