Cod sursa(job #228591)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 7 decembrie 2008 15:55:42
Problema Invers modular Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>   
#define LL long long   
  
  
LL N,M;   
  
LL cauta(LL nr)   
{   
    LL c=nr,i;   
    for(i=2;i*i<=nr; ++i)   
    {   
        if (nr % i == 0)   
        {   
            while(nr % i == 0)nr /= i;   
            c = (c / i) * (i - 1);   
        }   
    }   
        if (nr != 1) c = c / nr * (nr - 1);   
    return c;   
}   
  
int main()   
{   
    freopen("inversmodular.in","r",stdin);   
    freopen("inversmodular.out","w",stdout);   
    scanf("%lld %lld\n",&N,&M);   
    LL put =cauta(M)-1,i;   
    LL nr = N;   
    LL crt = 1;   
    for(LL p = 1;p <= put;p<<=1)   
    {   
        if (p & put) crt = (crt * nr) % M;   
        nr = (nr * nr) % M;   
    }   
    printf("%lld\n",crt);   
    return 0;   
}