Modul:Sandlådan/Averater/Delare

Från Wikipedia

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