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