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;
}
}
}