多个数最小公倍数

来源:互联网 发布:it服装官网 编辑:程序博客网 时间:2024/05/20 06:28
  1. typedef int             INT;  
  2.   
  3. INT gcd(INT a, INT b);  
  4. INT lcm(INT a, INT b);  
  5.   
  6. /***************************************************************************** 
  7. * 函数:LcmN                                                                * 
  8. * 参数:pnNum:数字数组.                                                         * 
  9. *      nLen:数字个数.                                                        * 
  10. * 返回值:返回多个数字的最小公倍数.                                          * 
  11. * 功能:计算并返回多个数字的最小公倍数.                                        * 
  12. * 说明:调用函数:INT lcm(INT a, INT b);                                         * 
  13. *****************************************************************************/  
  14. INT LcmN(INT *pnNum, INT nLen)  
  15. {  
  16.     INT i;  
  17.     INT nRes;  
  18.   
  19.     if (nLen < 0)  
  20.         return -1;  
  21.     if (1 == nLen)  
  22.         return pnNum[0];  
  23.   
  24.     nRes = lcm(pnNum[0], pnNum[1]);  
  25.     for (i=2; i<nLen; i++)  
  26.         nRes = lcm(nRes, pnNum[i]);  
  27.   
  28.     return nRes;  
  29. }  
  30.   
  31. /***************************************************************************** 
  32. * 函数:gcd                                                                     * 
  33. * 参数:a:数字1.                                                              * 
  34. *      b:数字2.                                                                * 
  35. * 返回值:返回a和b的最大公约数.                                               * 
  36. * 功能:计算并返回a和b的最大公约数(递归版本).                               * 
  37. *****************************************************************************/  
  38. /* 
  39. INT gcd(INT a, INT b) 
  40. { 
  41.     if (0 == b) 
  42.         return a; 
  43.     return gcd(b, a % b); 
  44. } 
  45. */  
  46.   
  47. /***************************************************************************** 
  48. * 函数:gcd                                                                     * 
  49. * 参数:a:数字1.                                                              * 
  50. *      b:数字2.                                                                * 
  51. * 返回值:返回a和b的最大公约数.                                               * 
  52. * 功能:计算并返回a和b的最大公约数(循环版本).                               * 
  53. *****************************************************************************/  
  54. INT gcd(INT a, INT b)  
  55. {  
  56.     INT nTem;  
  57.   
  58.     while (0 != b)  
  59.     {  
  60.         nTem = b;  
  61.         b = a % b;  
  62.         a = nTem;  
  63.     }  
  64.   
  65.     return a;  
  66. }  
  67.   
  68. /***************************************************************************** 
  69. * 函数:lcm                                                                     * 
  70. * 参数:a:数字1.                                                              * 
  71. *      b:数字2.                                                                * 
  72. * 返回值:返回a和b的最小公倍数.                                               * 
  73. * 功能:计算并返回a和b的最小公倍数.                                             * 
  74. * 说明:调用函数:INT gcd(INT a, INT b);                                         * 
  75. *****************************************************************************/  
  76. INT lcm(INT a, INT b)  
  77. {  
  78.     return a / gcd(a, b) * b;  
  79. }  
0 0
原创粉丝点击