Модуль:Factorization
Зовнішній вигляд
| Цей модуль позначений як К:бета-модуль (33), і готовий до широкого вжитку. Він і досі новий і його слід використовувати з певною обережністю, щоб гарантувати, передбачувані результати. |
Цей модуль відображає факторизацію вказаного числа. Числа, менші за 2 і більші за 2^53-1, повернуть «Error: <number> out of range». Дробові числа округлюються до меншого.
- Параметри
- Перший безімений параметр є числом
product— символ, який використовується, щоб позначати множення. Стандартним значенням є ·prime— встановіть будь-яке значення, щоб прості числа повертали неформатоване посилання на Просте число замість посилання на число
Документація вище включена з Модуль:Factorization/документація. (ред. | історія)
Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього модуля.
Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки.
Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього модуля.
Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки.
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 .. ' '
end
end
function 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 > 2^53-1 then
return '<strong class="error">Error: ' .. number .. ' out of range</strong>'
end
local result = ""
local currentNumber = number
local power
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 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
local primeLink = frame.args['prime'] and true
if currentNumber == number and primeLink then
return '[[просте число|просте число]]'
end
result = string.sub(result,1,-4)
return mw.text.trim(result)
end
return p