Cod sursa(job #2711339)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 23 februarie 2021 22:46:50
Problema Invers modular Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;
int a,n,x,y;

int cmmdc (int a, int b, int &x, int &y) {
    if (b==0) {
        ///a*x+0*y=a
        ///x=1
        ///y=orice
        x=1;
        y=0;
        return a;
    }
    else {
        int d=cmmdc(b,a%b,x,y);
        int xa=x;
        int ya=y;
        int c=a/b;
        ///b*xa+a&b*ya=d
        ///b*xa+(a-b*c)*ya=d;
        ///a*x+b*y=d
        ///b*xa+(a-b*c)*ya=a*x+b*y
        ///b*xa+a*ya-b*c*ya=a*x+b*y
        ///b(xa-c*ya-y)=a(x-ya)
        ///o solutie este sa egalam parantezele cu 0
        ///x-ya=0
        ///x=ya

        ///xa-c*ya-y=0
        ///y=xa-c*ya
        x=ya;
        y=xa-c*ya;
        return d;
    }
}

int main() {
    ifstream fin("inversmodular.in");
    ofstream fout("inversmodular.out");
    fin>>a>>n;
    int d=cmmdc(a,n,x,y);
    ///a*x+n*y=1
    ///(n*y)%n=0, deci in calcul cu module reuzlta
    ///a*x=1
    ///Deci x=inversul modular al lui a
    fout<<x;
    return 0;
}