欧几里得算法 解决的问题是:寻找两个给定的正整数m和n的最大公约数
下面是C#代码的 欧几里得算法
【C#|[读书笔记] 欧几里得算法与该算法的扩充 C#】
文章图片
public int
MaxDivisor(
int
a,
int
b)
文章图片
文章图片
...
{
文章图片
int max=a>=b?a:b;
//得到最大数
文章图片
int min=a
文章图片
int r=1;
//余数
文章图片
while (r> 0)
文章图片
文章图片
...{
文章图片
r = max % min;
//求模
文章图片
max = min;
文章图片
min = r;
文章图片
}
文章图片
return max;
文章图片
}
欧几里得算法的扩展,问题描述如下:
寻找两个给定的正整数m和n的最大公约数d 和两个整数,使得a*m+b*n=d
下面是C#的 欧几里得算法扩展的代码
文章图片
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#|C# 文件路径操作
- C# 接口实例
- C#|10、接口、抽象、密封、开放封闭原则
- c#|11、C#处理程序异常的技术
- C#|九、C#结构 类 属性
- Asp.net|System.Globalization.DateTimeFormatInfo.InvariantInfo