Cod sursa(job #1521011)
| Utilizator | Data | 9 noiembrie 2015 20:15:32 | |
|---|---|---|---|
| Problema | Invers modular | Scor | 50 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.53 kb |
#include <fstream>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
int a,n,p,i,l,c;
long long pow,ans;
int main()
{
f>>a>>n;
l=n;
p=n;
for (i=2;i*i<=n;i++)
if (n%i==0){
while(n%i==0)
n/=i;
p=(p/i)*(i-1);
}
if (n>1)
p=(p/n)*(n-1);
p--;
ans=1;
pow=a%l;
for (i=0;(1<<i)<=p;i++)
{
if (p & (1<<i))
ans=((ans%l)*(pow%l))%l;
pow=((pow%l)*(pow%l))%l;
}
g<<ans<<' ';
return 0;
}
