Cod sursa(job #3295438)

Utilizator RobertMM05Molcomis Robert-Marian RobertMM05 Data 5 mai 2025 19:22:27
Problema Invers modular Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <string.h>


long long inmultireLog(long long n, long long p, long long MOD) {
    long long rez = 1;

    n %= MOD;
    while(p) {
        if(p % 2 == 1) {
            rez = (rez * n);
            rez %= MOD;
        }
        n *= n;
        n %= MOD;
        p /= 2;
    }

    return rez;
}

long long phi(long long n) {
    long long rez = n;
    for(long long i = 2; i * i <= n; i += 2) {
        int exp = 0;
        while(n % i == 0) {
            n /= i;
            exp++;
        }
        
        if(exp > 0) {
            rez = rez / i * (i - 1);
        }

        if(i == 2) {
            i--;
        }
    }

    if(n != 1) {
        rez = rez / n * (n-1);
    }
    
    return rez;
}


int main() {
    FILE *input = fopen("inversmodular.in", "r");
    FILE *output = fopen("inversmodular.out", "w");

    long long a, n;
    fscanf(input, "%lld %lld", &a, &n);

    //printf("phi(n) = %d", phi(n));
    fprintf(output, "%lld", inmultireLog(a, phi(n) - 1, n) % n);
    
    fclose(input);
    fclose(output);

    return 0;
}