在Lua中进行排序,计算项目数量

以下代码有两个简单的问题。下面的脚本检查一个数字是否为质数,如果不是,则返回该数字的所有因数,否则只返回该数字是质数。不要关注脚本中的 zs.相关内容,因为它是客户特定的,并且与脚本功能无关。

这个脚本本身几乎完美无缺,除了两个小问题 - 第一个问题是因数列表不按顺序返回自己...也就是说,对于24,它会返回1、2、12、3、8、4、6和24, 而不是1、2、3、4、6、8、12和24。我不能把它打印成一个表格,所以它需要作为一个列表返回。如果它需要被排序为一个表格,然后再转换为一个列表,我可以处理。所有的问题都只在于最终结果是列表。

另一个细节是,我需要检查列表中是否只有两个或更多的数字。如果只有两个数字,它就是一个质数(1和该数字)。我现在的方法行不通,有没有什么方法可以实现这一点?我感谢所有的帮助!

function get_all_factors(number)
  local factors = 1
  for possible_factor=2, math.sqrt(number), 1 do
    local remainder = number%possible_factor

    if remainder == 0 then
      local factor, factor_pair = possible_factor, number/possible_factor
      factors = factors .. ", " .. factor
      if factor ~= factor_pair then
        factors = factors .. ", " ..  factor_pair
      end
    end
  end

  factors = factors .. ", and " .. number
  return factors
end

local allfactors = get_all_factors(zs.param(1))
if zs.func.numitems(allfactors)==2 then
  return zs.param(1) .. " 是质数。"
else
  return zs.param(1) .. " 不是质数,它的因数是:" .. allfactors
end

原文链接 https://stackoverflow.com/questions/2763650

点赞
stackoverflow用户206020
stackoverflow用户206020

如果我理解您的问题正确,我建议将您的逻辑拆分一下。首先创建一个包含分数的表,然后进行排序,最后创建字符串表示。

-- 创建包含数字所有因子的表。
function createFactors(n)
    local factors = {}
    -- for循环等等在这里,如果找到了因子,则将其添加到表中。
    -- ...
    table.insert(factors, n)
    -- ...
    -- #找到所有因子后,只需返回表。
    return factors
end

-- Lua提供了一种称为table.sort的表排序方法。
local factors = createFactors(139)
table.sort(factors)

-- 有一种方法可以创建表的字符串表示形式,
-- 即称为table.concat,第一个参数是表,第二个参数是用于分隔值的字符。
table.concat(factors, ", ")
2010-05-04 08:29:45
stackoverflow用户41661
stackoverflow用户41661

Nice ansewr from ponzao.

为了完成结果,这里有一个通用的例程可以把 Lua 的字符串列表转换成英文字符串并带有 "and",以表示该列表:

function string.commafy(t, andword)
  andword = andword or 'and'
  local n = #t
  if n == 1 then
    return t[1]
  elseif n == 2 then
    return table.concat { t[1], ' ', andword, ' ', t[2] }
  else
    local last = t[n]
    t[n] = andword .. ' ' .. t[n]
    local answer = table.concat(t, ', ')
    t[n] = last
    return answer
  end
end

使用 string.commafy(factors) 来代替 table.concat(factors, ', ')

2010-05-04 22:11:39