使用以下代码的两个快速问题(我希望...)。下面的脚本检查一个数字是否为素数,如果不是,则返回该数字的所有因子,否则它只返回数字素数。不要理会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) .. " is prime."
else
return zs.param(1) .. " is not prime, and its factors are: " .. allfactors
end
答案 0 :(得分:3)
如果我理解你的问题,我建议你稍微分解你的逻辑。我们的想法是首先创建一个包含分数的表,然后进行排序,然后创建字符串表示。
-- Creates a table containing all the factors for a number. function createFactors(n) local factors = {} -- The for loop etc. would be here. If you find a factor then add -- it in the table. -- ... table.insert(factors, n) -- ... --# Once you've found all the factors just return the table. return factors end -- Lua offers a method for sorting tables called table.sort. local factors = createFactors(139) table.sort(factors) -- There is a method for creating a string representation of a table -- called table.concat, the first parameter is the table and the second -- is the character that is used to delimit the values. table.concat(factors, ", ")
答案 1 :(得分:2)
来自ponzao的很好的ansewr。要对结果进行最后润色,这里是一个通用例程,用于将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
而不是table.concat(factors, ', ')
使用string.commafy(factors)
。