Pagini recente » Cod sursa (job #284547) | Cod sursa (job #1040889) | Cod sursa (job #3032487) | Cod sursa (job #3237343) | Cod sursa (job #2711339)
#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;
}