Pagini recente » Cod sursa (job #970521) | Cod sursa (job #771533) | Cod sursa (job #3249318) | Cod sursa (job #2361661) | Cod sursa (job #1118992)
#include <fstream>
#include<math.h>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
long long a,n;
int x[2000002];
void ciur()
{
int i,j;
for(i=2;i*i<=n;i++)
{
for(j=2;j*i<=n&&x[i]==0;j++)
{
x[i*j]=1;
}
}
}
int ex(int a,int p)
{
int sol=1,i;
for(i=0;(1<<i)<=p;i++)
{
if( ((1<<i)&p)>0 ) sol=(sol*a)%n;
a=(a*a)%n;
}
return sol;
}
int main()
{
int i,nr=0,nn,j;
in>>a>>n;
nn=n-1;
for(i=2;i*i<=n;i++)
{
if(n%i==0&&x[i]==0)
{
nr=n/i;
for(j=2;j*i<=n;j++)
{
if(x[i*j]==0) x[i*j]=1;
else nr--;
}
nn=nn-nr;
}
}
if(nn==n-1)out<<ex(a,n-2);
else out<<ex(a,nn);
return 0;
}