Leí en alguna parte que el algoritmo más eficiente encontró puede calcular los factores en tiempo, pero el código que he escrito es O ( n ) o posiblemente O ( n log n ) dependiendo de qué tan rápida sea la división y el módulo. Estoy bastante seguro de que he entendido mal algo en alguna parte, pero no estoy seguro de dónde. Esto es lo que escribí en forma de pseudocódigo.
function factor(number) -> list
factors = new list
if number < 0
factors.append(-1)
number = -number
i = 2
while i <= number
while number % i == 0
factors.append(i)
number /= i
i++
return factors