Mai intai trebuie sa te autentifici.

Cod sursa(job #2576227)

Utilizator Gabrian11387Gabrian11387 Gabrian11387 Data 6 martie 2020 17:57:15
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, a;
long long x;

int prim(int n)
{
    if(n<2)
        return 0;
    if(n%2==0 && n>2)
        return 0;
    for(int d=3;d*d<=n;d+=2)
        if(n%d==0)
            return 0;
    return 1;
}

long long P(int a, int n, int mod)
{
    long long p=1;
    while(n)
    {
        if(n%2==1)
            p=((p%mod)*(a%mod))%mod;
        a=((a%mod)*(a%mod))%mod;
        n/=2;
    }
    return p;
}

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

int main()
{
    fin >> a >> n;
    // Inversul moduelar a lui a
    if(prim(n))
        x=P(a,n-1,n);
    else
        x = P(a,Phi(n)-1,n);
    fout << x%n;
    return 0;
}