Cod sursa(job #2124466)

Utilizator victor_d54Doroftei Victor victor_d54 Data 7 februarie 2018 11:21:14
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
long long a,n,x,r,b,nrd,ind,aux;
int main()
{
    long long i,p,d;
    in>>a>>n;
    a=a%n;
    aux=n;
    ind=n;
    for(d=2;d*d<=aux;d++)
    {
        p=0;
        while(n%d==0)
        {
            aux=aux/d;
            p++;
        }
        nrd=nrd*(1+p);
        if(p)
            ind=ind/d*(d-1);
    }
    if(aux>1)
        ind=ind/aux*(aux-1);
    r=1;
    ind--;
    b=ind;
    while(b)
    {
        if(b%2==1)
            r=(r*a)%n;
        a=(a*a)%n;
        b/=2;
    }
    out<<r;
    return 0;
}