Module:Factorization: Difference between revisions
Appearance
Content deleted Content added
Gamutrungs (talk | contribs) No edit summary |
Gamutrungs (talk | contribs) clear Tag: Blanking |
||
Line 1: | Line 1: | ||
local p = {} |
|||
function p.factor(frame) |
|||
-- Consider calling the parser function #expr |
|||
-- to simplify a potential mathematical expression? |
|||
number = tonumber(frame.args[1]) |
|||
if number == nil then |
|||
return '<strong class="error">Error: input not recognized as a number</strong>' |
|||
end |
|||
productSymbol = frame.args['product'] or '·' |
|||
bold = frame.args['bold'] and true |
|||
big = frame.args['big'] and true |
|||
serif = frame.args['serif'] and true |
|||
primeLink = frame.args['prime'] and true |
|||
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 |
|||
result = "" |
|||
currentNumber = number |
|||
power = 0 |
|||
divisor = 2 |
|||
-- 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 2 |
|||
result = result .. powerformat(divisor, power, productSymbol) |
|||
divisor = divisor + (divisor == 2 and 1 or 2) |
|||
end |
|||
if currentNumber ~= 1 then |
|||
result = result .. currentNumber .. ' ' .. productSymbol .. ' ' |
|||
end |
|||
if currentNumber == number and primeLink then |
|||
return '[[prime number|prime]]' |
|||
end |
|||
result = string.sub(result,1/-4) |
|||
return format(result) |
|||
end |
|||
function powerformat(divisor, power, productSymbol) |
|||
if power < 1 then return '' |
|||
elseif power == 1 then return divisor .. ' ' .. productSymbol .. ' ' |
|||
else return divisor .. '<sup>' .. power .. '</sup>' .. productSymbol .. ' ' |
|||
end |
|||
end |
|||
function format(numString) |
|||
if bold then |
|||
numString = '<b>'..numString..'</b>' |
|||
end |
|||
ret = (serif or big) and '<span ' or '' |
|||
if serif then ret = ret .. 'class="texhtml" ' end |
|||
if big then ret = ret .. 'style="font-size:165%" ' end |
|||
ret = ret .. ((serif or big) and '>' or '') .. numString .. '</span>' |
|||
return ret |
|||
end |
|||
return p |
Revision as of 14:58, 18 January 2018
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
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