Cod sursa(job #2124469)

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