欧几里得算法 解决的问题是:寻找两个给定的正整数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#的 欧几里得算法扩展的代码


































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