Cod sursa(job #307122)

Utilizator DraStiKDragos Oprica DraStiK Data 23 aprilie 2009 09:16:09
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
int n,m,p,sol;
int euler (int m)
{
    int i,nrc=m;
    for (i=2; i*i<=m; ++i)
        if (!(m%i))
        {
            while (!(m%i))
                m/=i;
            nrc=(nrc/i)*(i-1);
        }
    if (m!=1)
        nrc=(nrc/m)*(m-1);
    return nrc;    
}
int lgput (int n,int p,int MOD)
{
    for (sol=1; p; p>>=1)
    {
        if (p&1)
            sol=(sol*n)%MOD;
        n=(n*n)%MOD;
    }
    return sol;
}
int main ()
{
	freopen ("inversmodular.in","r",stdin);
	freopen ("inversmodular.out","w",stdout);
    scanf ("%d%d",&n,&m);
    p=euler (m)-1;
    printf ("%d",lgput (n,p,m));
    return 0;
}