David Lasry
David Lasry

Reputation: 1407

Sum of primes in a number - Lua

I'm trying to calculate the sum of the prime numbers in a given number. For instance, for the number 123456, the result will be 10 because 2+3+5 = 10.

I tried to write a code that does that in Lua but I had some issues.

First, here is the code:

    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()

It returnes 9 instead of 10. Another thing I've noticed is it adds 1 also to sum, but 1 isn't a prime. What's the problem here?

Upvotes: 3

Views: 304

Answers (1)

danielgpm
danielgpm

Reputation: 1672

string.gmatch returns a string, you need to convert it to number before doing calculations

Btw, you are doing the prime validation twice on your loop.

This is a fixed version (returns 10 as expected):

...

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

Upvotes: 6

Related Questions