欧几里得算法 解决的问题是:寻找两个给定的正整数m和n的最大公约数
下面是C#代码的 欧几里得算法
public
int
MaxDivisor(
int
a,
int
b)

...
{
int max=a>=b?a:b;//得到最大数
int min=a<b?a:b;//得到最小数
int r=1; //余数
while (r> 0)

...{
r = max % min; //求模
max = min;
min = r;
}
return max;
}
public
int
MaxDivisorex(
int
sum1,
int
sum2,
out
int
a,
out
int
b)

...
{
int tmp_b=a = 0;
int tmp_a=b = 1; //tmp_b tmp_a 是 辅助变量
int max = sum1 >= sum2 ? sum1 : sum2;//得到最大数
int min = sum1 < sum2 ? sum1 : sum2;//得到最小数
int q = 0; //商
int r = 1; //余数
q = max / min;
r = max % min;
max = min;
min = r;
while (r > 0)

...{
int tmp = tmp_a;
tmp_a = a;
a = tmp - q * a;
tmp = tmp_b;
tmp_b = b;
b = tmp - q * b;
q = max / min;
r = max % min;
max = min;
min = r;
}
return max;
}
结果验证
int
a, b;
int
r
=
MaxDivisorex(
1769
,
551
,
out
a,
out
b);
MessageBox .Show(
string
.Format (
"
{0} * 1769 + {1} *551 = {2}
"
,a,b,(a
*
1769
+
b
*
551
)));
这个算法不是很复杂,不过要清楚还真是费事,等我可以解释得很简单的时候我再解释好了,现在相当于我自己的读书笔记。
如果有人能简单的解释出来的话,也麻烦留下言。谢谢。。。
下面是C#代码的 欧几里得算法















欧几里得算法的扩展,问题描述如下:
寻找两个给定的正整数m和n的最大公约数d 和两个整数,使得a*m+b*n=d
下面是C#的 欧几里得算法扩展的代码


































如果有人能简单的解释出来的话,也麻烦留下言。谢谢。。。