Module documentation
This module displays the factorization of a given number. Numbers smaller than 2 or greater than 1,000,000,000 return "Error: <number> out of range". Fractional numbers are rounded down.
- Parameters
- The first unnamed parameter is the number
product
- the symbol to be used to indicate times. Defaults to ·bold
- set to any value to make it boldserif
- set to any value to make it serifbig
- set to any value to make it bigprime
- set to any value to have prime numbers return an unformatted link to prime instead of the number
local p = {}local function powerformat(divisor, power, productSymbol)if power < 1 then return '' elseif power == 1 then return divisor .. ' ' .. productSymbol .. ' ' else return divisor .. '<sup>' .. power .. '</sup> ' .. productSymbol .. ' ' endendlocal function format(numString, bold, big, serif) if bold then numString = '<b>'..numString..'</b>' endlocal ret = (serif or big) and '<span ' or ''if serif then ret = ret .. 'class="texhtml" ' endif big then ret = ret .. 'style="font-size:165%" ' endret = ret .. ((serif or big) and '>' or '') .. numString .. ((serif or big) and '</span>' or '') return retendfunction p.factor(frame) local number = tonumber(frame.args[1]) if number == nil then return '<strong class="error">Error: input not recognized as a number</strong>' end number = math.floor(number) if number < 2 or number > 1000000000 or number == math.huge then return '<strong class="error">Error: ' .. number .. ' out of range</strong>' end local result = "" local currentNumber = number local power = 0 local divisor = 2 local productSymbol = frame.args['product'] or '·' -- Attempt factoring by the value of the divisor -- divisor increments by 2, except first iteration (2 to 3) while divisor <= math.sqrt(currentNumber) do power = 0 while currentNumber % divisor == 0 do currentNumber = currentNumber / divisor power = power + 1 end-- Concat result and increment divisor-- when divisor is 2, go to 3. All other times, add 2result = result .. powerformat(divisor, power, productSymbol) divisor = divisor + (divisor == 2 and 1 or 2) end if currentNumber ~= 1 then result = result .. currentNumber .. ' ' .. productSymbol .. ' ' end local primeLink = frame.args['prime'] and true if currentNumber == number and primeLink then return '[[prime number|prime]]' end result = string.sub(result,1,-4) local bold = frame.args['bold'] and true local big = frame.args['big'] and true local serif = frame.args['serif'] and true return format(result, bold, big, serif)endreturn p
🔥 Top keywords: Main PageSpecial:SearchWikipedia:Featured picturesYasukeHarrison ButkerRobert FicoBridgertonCleopatraDeaths in 2024Joyce VincentXXXTentacionHank AdamsIt Ends with UsYouTubeNew Caledonia2024 Indian general electionHeeramandiDarren DutchyshenSlovakiaKingdom of the Planet of the ApesAttempted assassination of Robert FicoLawrence WongBaby ReindeerXXX: Return of Xander CageThelma HoustonFuriosa: A Mad Max SagaMegalopolis (film)Richard GaddKepler's SupernovaWicked (musical)Sunil ChhetriXXX (2002 film)Ashley MadisonAnya Taylor-JoyPlanet of the ApesNava MauYoung SheldonPortal:Current eventsX-Men '97