|
有了gcd, 看似计算lcm很容易, 实现起来却是很麻烦。
找了一个比较简单的递归算法来实现多个数的lcm
with t as ( select 20 n1, 30 n2, 10 n3, 45 n4 from dual)
, mlcm (m1, m2, m3, m4)
as ( select n1, n2, n3, n4 from t
union all
select
case when m1 = least(m1,m2,m3,m4) then m1+n1 else m1 end,
case when m2 = least(m1,m2,m3,m4) then m2+n2 else m2 end,
case when m3 = least(m1,m2,m3,m4) then m3+n3 else m3 end,
case when m4 = least(m1,m2,m3,m4) then m4+n4 else m4 end
from mlcm, t where not (m1= m2 and m1=m3 and m1=m4 )
)
select max(m1) from mlcm
SQL> /
MAX(M1)
----------
180
Executed in 0.063 seconds
至于辗转相除计算lcm, 实际上还是没做出来。 newkid, 我先欠着, 以后再说。  |
|