Cod sursa(job #822846)
Utilizator | Data | 24 noiembrie 2012 09:14:29 | |
---|---|---|---|
Problema | Invers modular | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.52 kb |
#include<cstdio>
int a,n,i,f,x,y,r,sol;
int main()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
scanf("%d%d",&a,&n);
for(i=2;i<=n-1;i++)
{
x=n; y=i;
if(x%y==0) continue;
while(x%y)
{
r=x%y;
x=y;
y=r;
}
if(y==1) f++;
}
sol=1;
for(i=1,x=a;i<=f;i=i<<1,x*=x)
{
if(i&f) sol*=x;
if(sol>n) sol%=n;
}
printf("%d",sol);
return 0;
}