今天看到一个关于素数的问题,试着用刚看的lua语言写了个判断素数的方法如下:
--Author : Wing
--language : Lua
function isprime(i)
if i<=0 then
error(i.."不是合法的输入")
end
if i<=20 then
if i==2 or i==3 or i==5 or i==7 or i==11
or i==13 or i==17 or i==19 then
return true
else
return false
end
end
if i%2==0 or i%3==0 or i%5==0 or i%7==0 or i%11==0
or i%13==0 or i%17==0 or i%19==0 then
return false
else
k = math.sqrt(i)
for j=21, k do
if i%j==0 then
return false
else
j = j+2
end
end
return true
end
end
对它用以下代码去测试效率时,发现判断1到100W数的素数性时用了3秒多。
t = os.time()
print(os.time())
for i=1, 1000000 do
if isprime(i) then
end
end
print(os.time())
t = os.time() - t
print(t)
在百试上搜了一个高效算法对比了一下,百科上高效算法只用了2秒多,下面是c代码翻成的lua代码。
function prime(num)
if num==2 or num==3 or num==5 then
return true
end
c=7
if num%2==0 or num%3==0 or num%5==0 or num==1 then
return false
end
maxc=math.sqrt(num)
while (c<=maxc) do
if num%c==0 then return false end
c=c+4
if num%c==0 then return false end
c=c+2
if num%c==0 then return false end
c=c+4
if num%c==0 then return false end
c=c+2
if num%c==0 then return false end
c=c+4
if num%c==0 then return false end
c=c+6
if num%c==0 then return false end
c=c+2
if num%c==0 then return false end
c=c+6
end
return true
end