Cod sursa(job #3298367)

Utilizator CosminM12Murariu Rusalin - Cosmin CosminM12 Data 29 mai 2025 09:49:27
Problema Invers modular Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <stdio.h>

long long findTotient(long long n) {
    long long result = n;

    for(long long i=2;i*i<=n;i++) {
        if(n % i == 0) {
            while(n % i == 0) {
                n /= i;
            }
            result = (result / i) * (i - 1);
        }
    }

    if(n > 1) {
        result = (result / n) * (n - 1);
    }

    return result;
}


long long modularExp(long long base, long long exp, long long mod) {
    if(mod == 0) {
        return -1;
    }
    
    long long result = 1;
    base = base % mod;

    while(exp > 0) {
        if(exp % 2 == 1) {
            result = (result * base) % mod;
        }

        base = (base * base) % mod;
        exp /= 2;
    }

    return result;
}


int main() {
    FILE *input, *output;

    input = fopen("inversmodular.in", "r");
    output = fopen("inversmodular.out", "w");

    long long a, n;

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

    long long phi = findTotient(n);

    long long inv = modularExp(a, phi-1, n);

    fprintf(output, "%lld", inv);

    fclose(input);
    fclose(output);


    // long long power = findTotient(n)-1;
    // long long number = a;
    // long long result = 1;


    //LL put = getphi(M) - 1;
	//LL nr = N;
	// LL crt = 1;
    // for(LL p = 1;p <= put;p <<= 1)
    // {
	//  	if (p & put) crt = (crt * nr) % M;
	//   	nr = (nr * nr) % M;
	// }

    return 0;
}