扩展的欧几里得算法
椰汁笔记,欢迎指正。
算法原理:
C实现:
/* * 定义扩展欧几里得数据结构 */
typedef struct{
int d; //最大公因数
int y; //b乘法逆元
int x; //a乘法逆元
} Euclid;
/* * 整数求逆 */
Euclid *get_gcd_inverse(int a, int b)
{
int x, y, d, x1, x2, y1, y2, q, r;
Euclid *e = (Euclid *)malloc(sizeof(Euclid)); i
f (b == 0)
{
d = a;
x = 1;
y = 0;
e->d = d;
e->y = y;
e->x = x;
return e;
}
x2 = y1 = 1;
x1 = y2 = 0;
while (b > 0)
{
q = a / b;
r = a - q * b;
x = x2 - q * x1;
y = y2 - q * y1;
a = b;
b = r;