Cod sursa(job #2467823)

Utilizator TudolHulubei Tudor Tudol Data 5 octombrie 2019 08:49:52
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
int LogP(int a,int n,int Mod)
{
    int p=1;
    while(n>0)
    {
        if(n%2==1)
            p=1LL*p*a%Mod;

        n/=2;
    a=(a*a)%Mod;
    }
    return p;
}
/**
Phi(n)=n*(p1-1)*(p2-1)*...*(pk-1)/(p1+p2+p3+...+pk)

*/

///complexitate o(sqrt(n))
int Phi(int n)
{
        int sol=n,p;
        for(p=2;p*p<=n && n>1;p++)
        {
            if(n%p==0)
                sol=sol/p*(p-1);
            while(n%p==0)
                n/=p;
        }
        if(n>1)
            sol=sol/n*(n-1);
        return sol;
}
int main()
{
    int a,n,phi;
    ifstream fin("inversmodular.in");
    ofstream fout("inversmodular.out");
    fin>>a>>n;
    phi=Phi(n);
    fout<<LogP(a,phi-1,n)<<"\n";
    fin.close();
    fout.close();

    return 0;
}