Cod sursa(job #3195077)

Utilizator amunnumeVlad Patrascu amunnume Data 20 ianuarie 2024 08:52:04
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
ll a,n,ph,i,j;
ll phi(ll n)
{
    ll p=n,d=2;
    while(d*d<=n)
    {
        if(n%d==0)
        {
            p=p/d*(d-1);
        }
        while(n%d==0)
        {
            n/=d;
        }
        if(d==2) d=3;
        else d+=2;
    }
    if(n>1) p=p/n*(n-1);
    return p;
}
ll pou(ll a,ll m)
{
    ll p=1;
    while(m)
    {
        if(m&1) p=(p*a)%n;
        a=(a*a)%n;
        m>>=1;
    }
    return p;
}
int main()
{
    fin>>a>>n;
    ph=phi(n);
    fout<<pou(a,ph-1);
    return 0;
}