【发布时间】:2016-03-09 06:20:53
【问题描述】:
我知道什么是扩展欧几里得算法以及为什么要在编程中使用它。它是一种非常有用的算法,用于求数的反模。我知道如何在 c++ 中实现它,这就是我在下面用 c++ 实现它的方式。
typedef pair<int, int> pii;
#define x first
#define y second
pii extendedEuclidean(int a, int b)
{
if(b==0)
return {a,0};
else {
pii d = extendedEuclidean(b, a%b);
return {d.y, d.x - (d.y*(a/b))};
}
}
现在,如果我想找到一个数字的反模,例如 13,其中 mod 是例如 1000007,那么我只需调用这个函数
pair<int, int> res = extendedEuclidean(13, 1000007);
那么结果就是
res.first
我的问题是为什么以及在这个递归中究竟发生了什么?以及为什么它会产生正确的结果。
注意:这里 gcd(a, b) 必须为 1。
【问题讨论】:
-
它完全按照代码所说的那样做。 :/.
-
你不理解算法或者为什么你写的代码实现了那个算法?
-
当你写“我知道如何在 C++ 中实现它”时,这是否意味着你自己实现了这个,或者只是你知道一个代码被剪掉了?在前一种情况下,您应该提供有关结果的第二个元素的一些信息。否则,您应该命名您的来源。
标签: c++ algorithm math recursion number-theory