RosettaCodeData/Task/Emirp-primes/Lua/emirp-primes.lua

42 lines
1.0 KiB
Lua

function isPrime (n)
if n < 2 then return false end
if n < 4 then return true end
if n % 2 == 0 then return false end
for d = 3, math.sqrt(n), 2 do
if n % d == 0 then return false end
end
return true
end
function isEmirp (n)
if not isPrime(n) then return false end
local rev = tonumber(string.reverse(n))
if rev == n then return false end
return isPrime(rev)
end
function emirpGen (mode, a, b)
local count, n, eString = 0, 0, ""
if mode == "between" then
for n = a, b do
if isEmirp(n) then eString = eString .. n .. " " end
end
return eString
end
while count < a do
n = n + 1
if isEmirp(n) then
eString = eString .. n .. " "
count = count + 1
end
end
if mode == "first" then return eString end
if mode == "Nth" then return n end
end
if #arg > 1 and #arg < 4 then
print(emirpGen(arg[1], tonumber(arg[2]), tonumber(arg[3])))
else
print("Wrong number of arguments")
end