Jump to content

Module:Factorization

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Ypnypn (talk | contribs) at 18:50, 28 April 2013. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

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..'<sup>'..power..'</sup> · '
    elseif power == 1 then
        result = result..' · '
    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..'<sup>'..power..'</sup> · '
        elseif power == 1 then
            result = result..' · '
        end

        prime = prime + 1
    end

    if currentNumber ~= 1 then
        result = result..currentNumber..' · '
    end

    result = string.sub(result,1,-5)
    result = '<span class="texhtml" style="font-size:165%"><b>'..result..'</b></span>'
    return result
end

return p