这是我的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)
将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)
我知道这是一个旧帖子,但由于它在谷歌的顶部附近,我认为张贴我的主要发现者不会有什么坏处。它基本上对明显的东西进行了一些简单的检查,然后以与 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)