Cod sursa(job #1480269)
Utilizator | Data | 2 septembrie 2015 13:12:51 | |
---|---|---|---|
Problema | Invers modular | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.45 kb |
#include<cstdio>
using namespace std;
unsigned long long a,n,nr,i,k,p;
int main()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
scanf("%lld %lld",&a,&n);
nr=n-2;
for(i=2;i*i<n;i++)
if(n%i==0)
nr=nr-n/i+1;
k=nr;
p=a;
nr=1;
while(k>0)
{
if(k%2==1)nr=nr*p%n;
p=p*p%n;
k/=2;
}
printf("%lld",nr);
return 0;
}