Cod sursa(job #3184303)

Utilizator Ilinca_Radu_2022Radu Ilinca-Rucsandra Ilinca_Radu_2022 Data 15 decembrie 2023 10:47:57
Problema Invers modular Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int x, n;
int fi=1;
int p, d, cn, pr;
long long expon(long long a, long long y) {
    if (y==1) return a;
    if (y%2==0) return (expon(a, y/2)*expon(a, y/2))%n;
    else return (a*expon(a, y/2)*expon(a, y/2))%n;
}
int main()
{
    fin>>x>>n;
    cn=n;
    d=2;
    while (d*d<=cn) {
        p=0;
        pr=1;
        while (cn%d==0) {
            cn/=d;
            p++;
            pr*=d;
        }
        if (p>0) fi*=(pr/d)*(d-1);
        d++;
    }
    if (cn>1) fi*=(cn-1);
    fout<<expon(x, fi-1);
    return 0;
}