Cod sursa(job #3291985)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 6 aprilie 2025 18:07:28
Problema Invers modular Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

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

bool IsPrime [2000002];
vector <int> prnr;

void Ciur(){
    IsPrime[0] = 0;
    IsPrime[1] = 0;
    for (int i=2;i<=2000000;++i){
        IsPrime[i] = 1;
    }
    for (int i=2;i<=2000000;++i){
        if (IsPrime[i]==1){
            for (int j=2*i;j<=2000000;j+=i){
                IsPrime[j] = 0;
            }
        }
    }
    for (int i=1;i<=2000000;++i){
        if (IsPrime[i]) prnr.push_back(i);
    }
    return;
}

int Putere(int p,int e,int MOD){
    int ans = 1;
    while (e){
        if (e%2==1){
            ans = (ans*p)%MOD;
        }
        p = (p*p)%MOD;
        e = (e/2)%MOD;
    }
    return ans;
}

int Indicatorul_Lui_Euler(int n){
    int ans = n;
    for (auto f:prnr){
        if (n%f!=0) continue;
        ans = ans/f;
        ans = ans*(f-1);
    }
    return ans;
}

signed main()
{
    Ciur();
    int A,MOD;
    fin >> A >> MOD;
    fout << Putere(A,Indicatorul_Lui_Euler(MOD)-1,MOD);
    return 0;
}