Cod sursa(job #1119009)
| Utilizator | Data | 24 februarie 2014 14:27:18 | |
|---|---|---|---|
| Problema | Invers modular | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.7 kb |
#include <fstream>
#include<math.h>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
long long a,n,nn;
int nr()
{
long long i,nn=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
nn=nn*(i-1)/i;
while(n%i==0)
{
n=n/i;
}
}
if(n!=1) nn=nn*(n-1)/n;
}
return nn;
}
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,nn,j,x;
in>>a>>n;
x=nr();
out<<ex(a,x-1);
return 0;
}
