c - 我需要一个关于这个方程的解释
问题描述
while(v!=0)
{
temp=u%v;
u=v;
v=temp;
}
我无法理解这个等式。为什么有 u=v 和 v=temp。这个方程如何找到最大公约数。温度是什么意思?
解决方案
该算法被称为“欧几里得算法”(参见维基百科)。
让成为和的x
最大公约数 (gcd) 。u
v
u > v
然后x
也是 gcdv
和u-v
。
在算法中,您不断从较大的数字中减去较小的数字,直到其中一个成为 gcd x
。
取模的temp = u % v
平均值(尽可能多地减去)u
v
v
u
所以在这一步之后,你的数字比你开始的要小temp
,v
它们有相同的 gcd。较小的值现在在temp
, 所以temp < v
,否则你可以继续减去。
为了能够重用代码,您必须确保较大的值在 inu
而较小的值在 in v
,sov
变成你的 newu
和temp
变成你的 new v
。
要打破循环v
( temp
) 必须成为0
. 要达到0
,u
必须是v
模运算前的倍数。数字及其倍数的 gcd 是数字本身,因此在这种情况下v
存储到。u
由于一直以来数字的 gcdx
没有改变,我们终于有了u == x
.
此方案temp
通常用于交换两个值。
temp=a;
a=b;
b=temp;
推荐阅读
- java - 我无法从 C++ 程序运行可执行 jar
- reactjs - 如何在 react-bootstrap-table2 中将嵌套的 json 传递给 BootstrapTable
- mysql - How to update a field with data from another field from the same dataset with mysql?
- swift - 在列表中嵌套按钮
- windows - How to set an environment variable dependent on another one? (Windows)
- c# - FieldValueSet part underlined while trying to update item in SharePoint Online list
- c# - How to change each other textbox when changing value (MVVM)
- javascript - 在顶部材质 UI 上垂直对齐文本
- r - Function to fetch several dataframes and bind them togheter - R
- javascript - How to draw dashed border style in react native