Module:Utils: Difference between revisions
Added is_prime and prime_factorization |
Exponents off by 1? Show exponent only if >1, misc. edits |
||
Line 55: | Line 55: | ||
-- returns true if integer n is prime; cannot be used with {{#invoke:}} | -- returns true if integer n is prime; cannot be used with {{#invoke:}} | ||
function p.is_prime(n) | function p.is_prime(n) | ||
local cached = primes[n] | |||
if cached ~= nil then | |||
return cached | |||
end | |||
for i = 2, math.sqrt(n) do | |||
if n % i == 0 then | |||
primes[n] = false | |||
return false | |||
end | |||
end | |||
primes[n] = true | |||
return true | |||
end | end | ||
Line 76: | Line 76: | ||
function p._prime_factorization(n) | function p._prime_factorization(n) | ||
local factors, powers = {}, {} | |||
local new_number = n | |||
for i = 2, n do | |||
if p.is_prime(i) then | |||
if new_number % i == 0 then | |||
factors[#factors + 1] = i | |||
powers[#factors] = 1 | |||
end | |||
while new_number % i == 0 do | |||
powers[#factors] = powers[#factors] + 1 | |||
new_number = new_number / i | |||
end | |||
if powers[#factors] > 1 then | |||
powers[#factors] = factors[#factors] .. "<sup>" .. powers[#factors] .. "</sup>" | |||
end | |||
end | |||
if new_number == 1 then | |||
break | |||
end | |||
end | |||
return table.concat(powers, " × ") | |||
end | end | ||
return p | return p |