Cod sursa(job #1569196)

Utilizator radiogard1999Dragoi Andrei radiogard1999 Data 15 ianuarie 2016 09:04:02
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

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

int a,n;

int Putere(int a,int k)
{
    int p=1,x=a;
    while(k>0)
    {
        if(k%2==1)
        {
            k--;
            p=(1LL*x*p)%n;
        }
        k/=2;
        x=(1LL*x*x)%n;
    }
    return p;
}


int Phi(int n)
{
    int rez,d;
    rez=n;
    d=2;
    while(n>1&&d*d<=n)
    {
        if(n%d==0)
        {
            rez=rez/d*(d-1);
            while(n%d==0) n=n/d;
        }
        d++;
    }
    if(n>1) rez=rez/n*(n-1);
    return rez;
}

int main()
{
    fin>>a>>n;
    fin.close();
    int x;
    x=Phi(n);
    fout<<Putere(a,x-1)<<"\n";
    fout.close();
    return 0;
}