Modul:Sandlådan/Averater/Delare
Utseende
Dokumentationen för denna modul kan skapas på Modul:Sandlådan/Averater/Delare/dok
--
-- Modul som ska skriva ut alla delare till ett givet tal.
-- Största tal som kan köras är 10200.
--
-- Exempel:
-- IN: 7 UT: 1, 7
-- IN: 12 UT: 1, 2, 3, 4, 6, 12
--
local p={}
function p.delare (frame)
tal = tonumber(frame.args[1])
separator = tostring(frame.args[2])
if frame.args[2] == nil then
separator = ", "
else
separator = frame.args[2]
end
primtalslista = {2, 3, 5, 7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97}
delare = {}
rest = tal
for i, primtal in pairs( primtalslista ) do
if primtal>math.sqrt(rest) then
break
end
while rest % primtal == 0 do
rest = rest / primtal
temp = {}
for k, v in pairs(delare) do
table.insert(temp, v*primtal)
table.insert(temp, tal/(v*primtal))
end
for k, v in pairs(temp) do
table.insert(delare, v)
end
table.insert(delare,primtal)
end
end
table.insert(delare,rest)
table.insert(delare,tal)
table.sort(delare)
temp = {1}
for k,v in pairs(delare) do
if temp[#temp]<v then
table.insert(temp,v)
end
end
table.sort(temp)
return table.concat(temp, separator)
end
return p