Pagini recente » Cod sursa (job #1287857) | Cod sursa (job #3206528) | Cod sursa (job #1484254) | Cod sursa (job #1942652) | Cod sursa (job #1313972)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
long long a,n,phi,c,i,j;
bitset <100001> viz;
long long rec(int p)
{
long long x,u=1;
if (p==0)
return 1;
else
{
x=rec(p/2);
x=x%c;
u=x*x;
u=u%c;
if (p%2==1) u=u*a;
u=u%c;
return u;
}
}
int main()
{
f>>a>>n;
c=n;
phi=1;
if (n%2==0){
while(n%2==0)
phi*=2,n/=2;
phi/=2;
}
for (i=3;i*i<=n;i+=2)
if (viz[i]==false)
{
if (n%i==0)
{
while(n%i==0)
phi*=i,n=n/i;
phi/=i;
phi*=i;
}
for (j=i*i;j*j<=n;j+=i)
viz[j]=true;
}
if (n>1) phi*=(n-1);
g<<rec((phi-1));
return 0;
}