Cod sursa(job #3134754)

Utilizator BusikBusuioc Nichita Busik Data 30 mai 2023 18:55:07
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>

long long calculareFi(long long num) {
    long long rez = num;
    for (long long i = 2; i * i <= num; ++i) {
        if (num % i == 0) {
            while (num % i == 0) {
                num /= i;
            }
            rez = (rez / i) * (i - 1);
        }
    }
    if (num > 1) {
        rez = (rez / num) * (num - 1);
    }
    return rez;
}

int main() {
    long long N, M;
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%lld %lld", &N, &M);
    long long putere = calculareFi(M) - 1;
    long long num = N % M;
    long long rez = 1;
    while (putere > 0) {
        if (putere & 1) {
            rez = (rez * num) % M;
        }
        num = (num * num) % M;
        putere >>= 1;
    }
    printf("%lld\n", rez);
    return 0;
}