拓展欧几里得算法实现

算法实现简明步骤

(1) 分析算法,整个过程中除了给定的整数a, b, 还有两个整数x, y ,及 最大公因子d, 参与算法过程的qi, r.
(2) 我们利用数组来处理qi这样一系列的数字,故最初赋值为:r[0] = a, r[1] = b, x[0] = -1, y[0] = 0, x[1] = 0, y[1] = 1.
(3) 之后就是进行具体的算法,不断更新x, y, r, q.
(4) 最后就是利用循环直到迭代出需要的结果,就可以直接求出最大公因子和对应的x, y.
测试用例如下:(包含互素数,非互素数,测试数据大小区间为[-65536,65535])

测试样例

拓展欧几里得算法实现_第1张图片

代码部分(可用

#include
using namespace std;
int ri[100] = { -1 };
int xi[100] = { -1 };
int yi[100] = { -1 };
int qi[100] = { -1 };
int mod(int a, int b) {
	int t = a / b;
	return a - t * b;
}

int main() {
	int a, b, x, y, i = 1, j = 1, k = 1;
	cout << "请输入参与算法测试的两个整数:";
	while (cin >> a >> b) {
		
		ri[0] = a; ri[1] = b;
		xi[0] = 1; xi[1] = 0;
		yi[0] = 0; yi[1] = 1;
		while (ri[i] != 0) {
			i++; j++; k++;
			ri[i] = mod(ri[i - 2], ri[i - 1]);
			qi[i] = ri[i - 2] / ri[i - 1];
			xi[j] = xi[j - 2] - qi[i] * xi[j - 1];
			yi[k] = yi[k - 2] - qi[i] * yi[k - 1];

		}
		int d = ri[i - 1]; x = xi[j - 1]; y = yi[k - 1];
		cout << "gcd(a,b) = d = " << d << endl;
		cout << "两个整数x = " << x << "  y = " << y << endl << endl;
		i = 1, j = 1, k = 1;
	}
	return 0;
}

你可能感兴趣的:(密码编码学,其他)