C#|[读书笔记] 欧几里得算法与该算法的扩充 C#

欧几里得算法 解决的问题是:寻找两个给定的正整数m和n的最大公约数
下面是C#代码的 欧几里得算法
【C#|[读书笔记] 欧几里得算法与该算法的扩充 C#】
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
public int MaxDivisor( int a, int b)
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
... {
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int max=a>=b?a:b; //得到最大数
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int min=aC#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int r=1; //余数
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
while (r> 0)
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
...{
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
r = max % min; //求模
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
max = min;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
min = r;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
}
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
return max;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
}

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

C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
public int MaxDivisorex( int sum1, int sum2, out int a, out int b)
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
... {
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int tmp_b=a = 0;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int tmp_a=b = 1; //tmp_b tmp_a 是 辅助变量
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int max = sum1 >= sum2 ? sum1 : sum2; //得到最大数
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int min = sum1 < sum2 ? sum1 : sum2; //得到最小数
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int q = 0; //商
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
int r = 1; //余数
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
q = max / min;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
r = max % min;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
max = min;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
min = r;
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
while (r > 0)
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片
...{
C#|[读书笔记] 欧几里得算法与该算法的扩充 C#
文章图片

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

    推荐阅读