Cod sursa(job #2909415)

Utilizator Cala_cc09Christian Cala Cala_cc09 Data 13 iunie 2022 14:19:38
Problema Invers modular Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

int expo(int x, int n, int mod)
{
    if(n == 0)
        return 1;
    int aux = 1;
    unsigned long long int p;
    while(n > 0)
    {
        if(n%2)
        {
            p=((unsigned long long int)aux%mod)*((unsigned long long int)x%mod);
            aux=p%mod;
        }
        p=((unsigned long long int)x%mod)*((unsigned long long int)x%mod);
        x=p%mod;
        n=n/2;
    }
    return aux;
}

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

 main()
{
    FILE *fin=fopen("inversmodular.in", "r");
    FILE *fout=fopen("inversmodular.out", "w");
    int A, N;
    fscanf(fin,"%d %d", &A, &N);
    fprintf(fout,"%d %d", expo(A, phi(N)-1, N));
}