70 lines
1.6 KiB
Lua
70 lines
1.6 KiB
Lua
function gcd(a, b)
|
|
if b == 0 then
|
|
return a
|
|
end
|
|
return gcd(b, a % b)
|
|
end
|
|
|
|
function printArray(a)
|
|
io.write('[')
|
|
for i,v in pairs(a) do
|
|
if i > 1 then
|
|
io.write(', ')
|
|
end
|
|
io.write(v)
|
|
end
|
|
io.write(']')
|
|
return nil
|
|
end
|
|
|
|
function removeAt(a, i)
|
|
local na = {}
|
|
for j,v in pairs(a) do
|
|
if j ~= i then
|
|
table.insert(na, v)
|
|
end
|
|
end
|
|
return na
|
|
end
|
|
|
|
function yellowstone(sequenceCount)
|
|
local yellow = {1, 2, 3}
|
|
local num = 4
|
|
local notYellow = {}
|
|
local yellowSize = 3
|
|
while yellowSize < sequenceCount do
|
|
local found = -1
|
|
for i,test in pairs(notYellow) do
|
|
if gcd(yellow[yellowSize - 1], test) > 1 and gcd(yellow[yellowSize - 0], test) == 1 then
|
|
found = i
|
|
break
|
|
end
|
|
end
|
|
if found >= 0 then
|
|
table.insert(yellow, notYellow[found])
|
|
notYellow = removeAt(notYellow, found)
|
|
yellowSize = yellowSize + 1
|
|
else
|
|
while true do
|
|
if gcd(yellow[yellowSize - 1], num) > 1 and gcd(yellow[yellowSize - 0], num) == 1 then
|
|
table.insert(yellow, num)
|
|
yellowSize = yellowSize + 1
|
|
num = num + 1
|
|
break
|
|
end
|
|
table.insert(notYellow, num)
|
|
num = num + 1
|
|
end
|
|
end
|
|
end
|
|
return yellow
|
|
end
|
|
|
|
function main()
|
|
print("First 30 values in the yellowstone sequence:")
|
|
printArray(yellowstone(30))
|
|
print()
|
|
end
|
|
|
|
main()
|