Cod sursa(job #2236382)
Utilizator | Data | 29 august 2018 13:24:31 | |
---|---|---|---|
Problema | Invers modular | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.74 kb |
#include <fstream>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
int n,a,MOD,e,p,putere(int);
int main()
{
f>>a>>n;
MOD=n;
e=1;
if(n%2==0)
{
n/=2;
while(n%2==0)
{
n/=2;
e*=2;
}
}
for(p=3; p*p<=n; p+=2)
if(n%p==0)
{
n/=p;
e*=p-1;
while(n%p==0)
{
n/=p;
e*=p;
}
}
if(n>1)
e*=n-1;
g<<putere(e-1);
return 0;
}
int putere(int e)
{
if(e==0)
return 1;
int r=putere(e/2);
r=1LL*r*r%MOD;
if(e%2==1)
r=1LL*r*a%MOD;
return r;
}