algorithm - 如何在欧几里德算法中找到 s 和 t

标签 algorithm visual-c++ c++-cli

<分区>

欧几里得算法的扩展

我们已经知道,对于任意两个整数 a 和 b,存在整数 s 和 t 使得 as + bt = gcd(a,b)。换句话说,gcd(a,b) 是 a 和 b 的线性组合。 gcd(a,b) 是两个整数的最小正组合。 a 和 b 本身表示为普通组合:a = 1· + 0·b 和 b = 0·a + 1·b。从这两个开始,欧几里德算法的扩展找到了 s 和 t,它们的存在迄今为止仅以形式化的方式建立。

将两个线性组合写在一列中,并将欧几里得算法的一步应用于左侧。假设 a = bp + r。将第二个方程乘以 p,然后从第一个方程中减去它: a = 1·a + 0·b b = 0·a + 1·b r = 1·a + (-p)·b

对最后两个等式应用相同的程序。以这种方式继续,直到左边的 Euclid 算法停止。右边就是我们要的线性组合。让我们用一个例子来验证一下:令 a = 2322,b = 654。我采用了求解线性方程的通常惯例,并省略了线性组合中的所有项,但左侧​​和右侧的两个系数除外。将结果放入表中,第四列等于 p(来自 a = bp + r,每一步都会变化。将 p 左侧的三个数字乘以 p,然后从它们正上方的数字中减去它们。记录结果在下一行。

int algoritmoeuclides(int a,int b)
if (a%b==0)
return b;
return algoritmoeuclides(b,a%b);
}


int main(array<System::String ^> ^args)
{
int a=525;
int b=231;
printf("%d",algoritmoeuclides(a,b));
getch();
}

到目前为止,这是我的代码,它运行完美。问题是当我试图找到 s 和 t 时。我不知道如何找到它,我在论坛上搜索过,但我知道编写此算法以查找 S 和 T 的最佳方法是什么。 我把所有的解释都给了你们一个想法。 PD:抱歉我的英语不好,我不会说英语。任何想法都会受到赞赏。

最佳答案

关于algorithm - 如何在欧几里德算法中找到 s 和 t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655427/

相关文章:

Java如何检查二维数组中的一行是否为空。

ruby-on-rails - 如何在 Ruby 中对世界杯小组赛表进行排序

string - 句子的词级编辑距离

c++ - std::function 在堆栈数组中使用时崩溃

C++/CLI 中的正则表达式用法

mysql - 具有多个值的数据库单元格?

c++ - 当不支持可变模板参数时,如何为元组专门化类模板?

c# - 我如何在 C# 函数中转换 C++ 函数

c++ - C++/CLI 中的重复析构函数调用和跟踪句柄

c++ - 组合函数、绑定(bind)、C++ 和托管代码