您的位置:首页 > 其它

算法学习之欧几里得算法求解两个整数的最大公因子

2015-01-20 18:11 357 查看
总有一些伟大的数学家为一些数学问题提出高效的解决算法, 比如在求解两个整数的最大公因子上常用的欧几里得算法也叫辗转相除法,这里的除指的是取模。

算法的中文描述是两个整数的最大公约数是其中较小的一个数和他们两个之间的差的最大公约数。 我们可以理解为辗转相除实际上就是一步一步的消除两个数之间的共同部分,直到其中一个变为零,然后另外一个就是要求的那个公约数。

比如我们现在要求105和45的最大公约数m,两个数中较小的一个是45。也就是说,如果m能被45整除(45=m*a),也能被105整除。这说明肯定存在一个整数p使得105能分解为105=m*b = m*(a+p)=m*a + m*p=45 + m*p, 接着,m*p = 105-45。 也就是说两个数的差也能被m整除。

这个算法的c语言实现为:

#include <stdio.h>

int ogdfunc(int op1, int op2)
{
int mem = 0;
<span style="white-space:pre">	</span>/* 参数正确性的检验 */
if(op1 <= 0 || op2 <= 0)
{
return -1;
}
if(op1 == op2)
{
return op1;
}
if(op1 > op2)
{
while(op2 > 0)
{
mem = op1 % op2;
op1 = op2;
op2 = mem;
}
return op1;
} else {
while(op1 > 0)
{
mem = op2 % op1;
op2 = op1;
op1 = mem;
}
return op2;
}
}

int main(int argc, char *argv[]) {
printf("maxval = %d\n", ogdfunc(20, 5));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐