[密碼學]擴展歐幾里得算法求最大公因數以及乘法逆元(C語言實現)

擴展的歐幾里得算法

椰汁筆記,歡迎指正。

算法原理:

在這裏插入圖片描述

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;        
		  x2 = x1;        
		  x1 = x;        
		  y2 = y1;        
		  y1 = y;        
		  d = a;        
		  x = x;        
		  y = y2;    
	  }    
	  d = a;    
	  x = x2;    
	  y = y2;    
	  e->d = d;    
	  e->y = y;    
	  e->x = x;    
	  return e;
}

利用結構體實現返回數據更加方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章