一个数字中的质数之和 - Lua

3

我想计算给定数字中所有质数的和。例如,对于数字123456,结果将为10,因为2 + 3 + 5 = 10。

我尝试使用Lua编写代码来实现这一点,但遇到了一些问题。

首先,这是代码:

    function isPrime(num)
if(num == 1 or (num ~= 2 and num%2 == 0)) then
  return false
end
for i=3, math.sqrt(num), 2 do
  if(num%i == 0) then
    return false
  end
end
return true
end

function sumOfPrimes(num)
local sum = 0
for digit in string.gmatch(num,"%d") do
  local prime = isPrime(digit)
  if(isPrime(digit)) then
    sum = sum + digit
  end
  print(digit)
end
return sum
end

function main()
print(sumOfPrimes(123456))
end
main()

它返回的是9而不是10。我还注意到它也将1加入了总和中,但1不是质数。这里有什么问题?


1
"string.gmatch" 返回的是字符串而不是数字。你需要使用 "tonumber" 进行转换。 - Etan Reisner
1个回答

6

string.gmatch返回的是一个字符串,你需要在进行计算之前将其转换为数字。

顺便提一下,在循环中你进行了两次素数验证。

这是修正后的版本(将会返回10):

...

function sumOfPrimes(num)
    local sum = 0
    for digit in string.gmatch(num, "%d") do
        digit = tonumber(digit) --needed conversion
        local prime_digit = isPrime(digit)
        if prime_digit then
            sum = sum + digit
        end
    end
    return sum
end

1
问题不在于计算 - 当进行计算时,Lua会将字符串转换为数字(如果可能)。问题在于关系运算(例如 `"1" ~= 1)。 - siffiejoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接