Module:Factorization
Appearance
![]() | 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
local p = {}
function p.factor(frame)
number = tonumber(frame.args[1])
if number < 2 or number > 1000000 then
return number
end
result = ""
currentNumber = number
power = 0
--First take care of 2, the only even prime number.
if currentNumber % 2 == 0 then
result = '2'
currentNumber = currentNumber / 2
power = 1
end
while currentNumber % 2 == 0 do
currentNumber = currentNumber / 2
power = power + 1
end
if power > 1 then
result = result..'^'..power..' \\cdot '
elseif power == 1 then
result = result..' \\cdot '
end
--Now do all odd numbers.
prime = 3
while prime <= math.sqrt(currentNumber) do
power = 0
if currentNumber % prime == 0 then
result = result..prime
currentNumber = currentNumber / prime
power = 1
end
while currentNumber % prime == 0 do
currentNumber = currentNumber / prime
power = power + 1
end
if power > 1 then
result = result..'^'..power..' \\cdot '
elseif power == 1 then
result = result..' \\cdot '
end
prime = prime + 1
end
if currentNumber ~= 1 then
result = result..currentNumber..' \\cdot '
end
result = string.sub(result,1,-8)
return result
end
return p