Pagini recente » Cod sursa (job #2876230) | Cod sursa (job #2231826) | Cod sursa (job #1194690) | Cod sursa (job #298219) | Cod sursa (job #2124437)
#include <iostream>
#include <fstream>
std::ifstream f("inversmodular.in");
std::ofstream g("inversmodular.out");
using namespace std;
long long n;
long long my_pow(long long a,long long b)
{
long long r=1;
while(b)
{
if(b%2)
{
r=(a%n)*(r%n);
r%=n;
}
a*=a;
a%=n;
b/=2;
}
return r;
}
bool prim(long long n)
{
if(n<2) return false;
for(int j=2; j*j<=n; j++)
if(n%j==0) return false;
return true;
}
int main()
{
long long a;
f>>a>>n;
long long fi;
fi=n;
int k;
if(!prim(n))
{
for(int i=2; i*i<=n; i++)
{
k=0;
while(n%i==0)
{
n/=i;
k=1;
}
if(k==1) fi=(fi/i) * (fi-1);
}
g<<my_pow(a,fi-1);
}
else g<<my_pow(a,n-2);
return 0;
}