Cod sursa(job #3295435)

Utilizator RobertMM05Molcomis Robert-Marian RobertMM05 Data 5 mai 2025 19:17:01
Problema Invers modular Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.05 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);
        }
        n *= n;
        n %= MOD;
        p /= 2;
    }

    return rez;
}

int phi(int n) {
    int rez = n;
    for(int 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;
    }
    
    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;
}