一个数字的素数之和 - Lua

Dav*_*sry 3 lua primes integer sum

我正在尝试计算给定数字中素数的总和.例如,对于数字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()
Run Code Online (Sandbox Code Playgroud)

它回归9而不是10.我注意到的另一件事是它也加1,但1不是素数.这有什么问题?

dan*_*gpm 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
Run Code Online (Sandbox Code Playgroud)