2014-12-03 38 views
3

我试图计算给定数字中素数的总和。例如,对于数字123456,结果将是10,因为2 + 3 + 5 = 10.一个数字素数的总和 - Lua

我试图编写一个代码,在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() 

它returnes 9,而不是10,我注意到的另一件事是它增加了1还总结,但1是不是质。这里有什么问题?

+1

'string.gmatch'返回一个字符串不是一个数字。你需要使用'tonumber'来转换。 – 2014-12-03 18:25:01

回答

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 2014-12-03 19:37:15