因为powerScript语法为我最熟悉的,所以选择用它实现。其它语言的语法大家可自行转换,不好意思.
下面是函数内容(of_gcd()方法参数此blog的上篇文章《
算法.数学.初级.求最大公约数--辗转相除法,powerbuilder powerscript实现》):
//====================================================================
// Function: nvo_arith_math::of_lcm()
//--------------------------------------------------------------------
// Description:
最小公倍数
(lease common multiple)
//
两个数的乘积
=
最大公约数
*
最小公倍数
//
对于多个数可以通过递归调用实现
//--------------------------------------------------------------------
// Arguments:
// readonly longlong all_num[]
待比较的数
//--------------------------------------------------------------------
// Returns: longlong
//--------------------------------------------------------------------
// Author: renwanly Date: 2007.03.13
//--------------------------------------------------------------------
// Modify History:
//
//====================================================================
longlong lll_num[],lll_mod
UnsignedInteger lui_cnt,i
lui_cnt = UpperBound(all_num[])
CHOOSE CASE lui_cnt
CASE 2 //
最小公倍数
=
两个数的乘积
/
最大公约数
return all_num[1]*all_num[2]/of_gcd(all_num[])
CASE 0,1 //
如果没有数或只有
1
个数
,
则错误
RETURN 0
CASE ELSE //
有多个数
,
结对比较后
,
递归调用此方法
FOR i = 1 To Truncate(lui_cnt/2,0)
lll_num[i] = all_num[i*2 - 1]*all_num[i*2]/of_gcd({all_num[i*2 - 1],all_num[i*2]})
NEXT
IF Mod(lui_cnt,2) = 1 THEN lll_num[UpperBound(lll_num[])+1] = all_num[lui_cnt]
RETURN of_lcm( lll_num[])
END CHOOSE
|