0
点赞
收藏
分享

微信扫一扫

【Linux】Linux背景历史

古得曼_63b6 2024-07-24 阅读 5

1. 算法描述:

欧几里得算法】求解两个正整数m,n的最大公因子

2. 算法求解步骤:

  • E1(求两个整数的余数):求两个正整数的余数,r = m % n
  • E2(判断余数是否为0):如果余数r为0,算法返回n;如果余数不为0,执行E3
  • E3(数值降低):令m = n,n = r,并进入E1

3. C++代码求解:

/*@author @还下着雨ZG
* @brief 求解两个正整数m,n的最大公因子
* @param[in] int m,第一个正整数
* @param[in] int n, 第二个正整数
* @return iRes,返回m和n的最大公因子
*/
int computeGstComDivisor(int m, int n)
{
	if(m <= 0 || n <=0)
	{
		return -1;
	}
	int ir = 0;
	while(1)
	{
		ir = m % n;
		if(ir == 0)
		{
			return n;
		}
		else
		{
			m = n;
			n = ir;
		}
	}
}

优化算法的运行效率:使得m > n

/*@author @还下着雨ZG
* @brief 求解两个正整数m,n的最大公因子
* @param[in] int m,第一个正整数
* @param[in] int n, 第二个正整数
* @return iRes,返回m和n的最大公因子
*/
int computeGstComDivisor(int m, int n)
{
	if(m <= 0 || n <=0)
	{
		return -1;
	}
	int ir = 0;
	if( m < n)
	{
		int iTmp = m;
		m = n;
		n = iTmp;
	}
	while(1)
	{
		ir = m % n;
		if(ir == 0)
		{
			return n;
		}
		else
		{
			m = n;
			n = ir;
		}
	}
}
举报

相关推荐

0 条评论