拓展欧几里得算法实现

算法实现简明步骤

(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])

测试样例

测试

代码部分(可用

#include<iostream>
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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值