Cod sursa(job #3369582)

Utilizator GDARIUSGHIUTA DARIUS VALENTIN GDARIUS Data 21 octombrie 2026 10:40:52
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("inversmodular.in");
ofstream cout("inversmodular.out");
vector <int> prim;
int baza,n,ind,d,phi;
int exp(int a, int x)
{
    if (x==0) return 1;
    if (x%2==1) return ((a%n)*(exp(a,x-1)%n))%n;
    int put=exp(a,x/2)%n;
    return ((put%n)*(put%n))%n;
}
char ciur[45005];
int main()
{cin>>baza>>n;
ciur[0]=1; ciur[1]=1;
for (int i=2; i*i<=45000; i++)
{
    if (ciur[i]==0)
    {
        for (int j=i*i; j<=45000; j+=i)
            ciur[j]=1;
    }
}
for (int i=0; i<=45000; i++)
    if (ciur[i]==0) prim.push_back(i);
d=prim[ind]; phi=n;
while (d*d<=n)
{
    if (n%d==0)
    {
        while (n%d==0) n/=d;
        phi=phi/d*(d-1);
    }
    ind++; d=prim[ind];
}
if (n>1) phi=phi/n*(n-1);
cout<<exp(baza,phi-1)%n;
    return 0;
}