Cod sursa(job #1425982)

Utilizator atatomirTatomir Alex atatomir Data 28 aprilie 2015 18:07:42
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>

using namespace std;

long long a,x,p,phi;

    ifstream fin("inversmodular.in");
    ofstream fout("inversmodular.out");

inline long long getPhi(long long x){
    long long curr=x,i;
    for(i=2;i*i<=x;i++){
        if(x % i == 0){
            while(x % i == 0) x /= i;
            curr = (curr /i)*(i-1);
        }
    }
    if(x != 1) curr = (curr/x)*(x-1);
    return curr;
}

int main()
{
    fin >> a >> p;

    phi = getPhi(p)-1;

    x=1;
    while(phi > 0){
        if(phi & 1) x = (x*a)% p;
        a = (a*a)% p;
        phi >>=1;
    }

    fout << x;

    fin.close();
    fout.close();
    return 0;
}