Modul:Divisors
Ausgesinn
| Dokumentatioun vum Modul:Divisors | [liesen] [änneren] [Versioune weisen] |
D'Dokumentatioun fir dëst Modul steet hei ënnendrënner an ass vun der Säit Modul:Divisors/doc hei agebonne ginn. All Froe sollen och op där hirer Diskussiounssäit gestallt ginn. Kuckt och: Hëllef:Moduler.
local p = {}
---- Arithmeetesch Funktiounen ----
-- Gëtt d'Deeler vun enger natierlecher Zuel als table erëm.
function p.getDivisors(n)
local divisors = {}
local sqrt = math.floor(math.sqrt(n))
for d = 1, sqrt do
if n % d == 0 then
table.insert(divisors, d)
local r = n / d
if d ~= r then
table.insert(divisors, r)
end
end
end
table.sort(divisors)
return divisors
end
-- Gëtt d'Primfacteure vun enger natierlecher Zuel als table erëm.
-- Falls distinct = false ass, kënnt all Facteur sou oft vir, wéi en d'Zuel
-- deelt; am anere Fall kënnt all Facteur just eng Kéier vir.
function p.getPrimeFactors(n, distinct)
local factors = {}
local d = 2
while d * d <= n do
seen = false
while n % d == 0 do
if not (seen and distinct) then
table.insert(factors, d)
seen = true
end
n = n / d
end
d = d + 1
end
if n > 1 then
table.insert(factors, n)
end
return factors
end
---- Formatéierungs- an aner Hëllefsfunktiounen ----
-- Formatéiert eng table als kommagetrennte Lëscht.
function p.formatList(t)
return table.concat(t, ", ")
end
-- Stellt eng table vun Zuelen an der Schreifweis 2{{Exp|3}}·3·5{{Exp|2}} duer.
function p.formatPrimeFactorProduct(factors)
if #factors == 0 then return "" end
local counts, parts = {}, {}
for _, prime in ipairs(factors) do
counts[prime] = (counts[prime] or 0) + 1
end
for prime in pairs(counts) do
table.insert(parts, prime)
end
table.sort(parts)
for i, prime in ipairs(parts) do
local exp = counts[prime]
if exp == 1 then
parts[i] = tostring(prime)
else
parts[i] = tostring(prime) .. "{{Exp|" .. exp .. "}}"
end
end
return table.concat(parts, "·")
end
-- Iwwerpréift, ob eng Zeecheketten eng ganz Zuel mat Absolutwäert < 10^15 ass.
function p.isSafeNumber(numberStr)
-- Iwwerpréift, ob den Inputstring eng ganz Zuel duerstellt, déi innerhalb
-- vun de Limitten ass, déi Scribunto-Lua korrekt duerstelle kann.
-- Experimentéieren ergëtt Limitte vun [-99999999999999,99999999999999]
-- (dat si jeeweils 14 9en).
local s = numberStr:gsub("^%-", "")
return s:match("^%d+$") and #s < 15
end
---- Benotzerinterface ----
-- Gëtt d'Deeler vun enger natierlecher Zuel als kommagetrennte Lëscht erëm.
function p.formattedDivisorList(frame)
local s = frame.args[1]
if not p.isSafeNumber(s) then
return nil
end
local n = tonumber(s)
local divisors = p.getDivisors(n)
return p.formatList(divisors)
end
-- Gëtt d'Primfacteure vun enger natierlecher Zuel als kommagetrennte Lëscht
-- erëm. All Facteur kënnt just eng Kéier vir.
function p.formattedPrimeFactorsList(frame)
local s = frame.args[1]
if not p.isSafeNumber(s) then
return nil
end
local n = tonumber(s)
local factors = p.getPrimeFactors(n, true)
return p.formatList(factors)
end
-- Gëtt d'Faktoriséierung vun enger natierlecher Zuel an der Schreifweis
-- 2{{Exp|3}}·3·5{{Exp|2}} erëm.
function p.formattedPrimeFactorization(frame)
local s = frame.args[1]
if not p.isSafeNumber(s) then
return nil
end
local n = tonumber(s)
local factors = p.getPrimeFactors(n, false)
return p.formatPrimeFactorProduct(factors)
end
return p
