30 lines
950 B
Lua
30 lines
950 B
Lua
function T(t) return setmetatable(t, {__index=table}) end
|
|
table.range = function(t,n) local s=T{} for i=1,n do s[i]=i end return s end
|
|
table.map = function(t,f) local s=T{} for i=1,#t do s[i]=f(t[i]) end return s end
|
|
table.batch = function(t,n,f) for i=1,#t,n do local s=T{} for j=1,n do s[j]=t[i+j-1] end f(s) end return t end
|
|
|
|
function isprime(n)
|
|
if n < 2 then return false end
|
|
if n % 2 == 0 then return n==2 end
|
|
if n % 3 == 0 then return n==3 end
|
|
for f = 5, n^0.5, 6 do
|
|
if n%f==0 or n%(f+2)==0 then return false end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function goldbach(n)
|
|
local count = 0
|
|
for i = 1, n/2 do
|
|
if isprime(i) and isprime(n-i) then
|
|
count = count + 1
|
|
end
|
|
end
|
|
return count
|
|
end
|
|
|
|
print("The first 100 G numbers:")
|
|
g = T{}:range(100):map(function(n) return goldbach(2+n*2) end)
|
|
g:map(function(n) return string.format("%2d ",n) end):batch(10,function(t) print(t:concat()) end)
|
|
print("G(1000000) = "..goldbach(1000000))
|