Lua Prime数字检查器

Nic*_*bin 4 lua numbers

这是我的Lua代码,用于获取用户输入,并检查输入的数字是否为素数.我的问题是程序认为任何偶数都不是素数,而任何奇数都是.

 print("Enter a number.")
 local number = io.read("*n")

 function prime(n)
 for i = 2, n^(1/2) do
   if (n % i) == 0 then
     return false
   end
   return true
 end
 end

 if prime(number) == true then
   print("Your number is prime!")
 end

 if prime(number) == false then
   print("Your number is not prime!")
 end
Run Code Online (Sandbox Code Playgroud)

lhf*_*lhf 9

return true退出循环.

因此:

function prime(n)
    for i = 2, n^(1/2) do
        if (n % i) == 0 then
            return false
        end
    end
    return true
end
Run Code Online (Sandbox Code Playgroud)


Pup*_*ppy 5

你过早地回归真实.你只要返回true,任何 i满足条件.您必须在循环放置返回.


Tay*_*lor 5

我知道这是一个旧帖子,但由于它在谷歌的顶部附近,我认为张贴我的主要发现者不会有什么坏处。它基本上对明显的东西进行了一些简单的检查,然后以与 Jon Ericson 帖子中的第一个示例类似的方式循环遍历剩下的东西。尚未对其进行基准测试,但它似乎足以应付。

--returns true if prime
function isPrime(n)
    local n = tonumber(n)
    --catch nil, 0, 1, negative and non int numbers
    if not n or n<2 or (n % 1 ~=0) then 
        return false
    --catch even number above 2
    elseif n>2 and (n % 2 == 0) then 
        return false
    --primes over 5 end in 1,3,7 or 9
    --catch numbers that end in 5 or 0 (multiples of 5)
    elseif n>5 and (n % 5 ==0) then 
        return false
    --now check for prime
    else
        --only do the odds
        for i = 3, math.sqrt(n), 2 do
            --did it divide evenly
            if (n % i == 0) then
                return false
            end
        end
        --can defeat optimus
        return true
    end
end
Run Code Online (Sandbox Code Playgroud)