Definición
Un entero positivo n
es un número práctico (secuencia OEIS A005153 ) si todos los enteros positivos más pequeños se pueden representar como sumas de divisores distintos de n
.
Por ejemplo, 18
es un número práctico: sus divisores son 1, 2, 3, 6, 9 y 18, y los otros enteros positivos menores de 18 se pueden formar de la siguiente manera:
4 = 1 + 3 5 = 2 + 3 7 = 1 + 6
8 = 2 + 6 10 = 1 + 9 11 = 2 + 9
12 = 3 + 9 = 1 + 2 + 9 = 1 + 2 + 3 + 6
13 = 1 + 3 + 9 14 = 2 + 3 + 9 15 = 6 + 9
16 = 1 + 6 + 9 17 = 2 + 6 + 9
Pero 14
no es un número práctico: sus divisores son 1, 2, 7 y 14, y no hay un subconjunto de estos que se sume a 4, 5, 6, 11, 12 o 13.
Desafío
Escriba un programa, función o verbo que tome como entrada un número entero positivo x
y devuelva o imprima el número práctico número x , indexado desde 1 para mantener la coherencia con OEIS. Su código debe ser lo suficientemente eficiente como para manejar entradas de hasta 250000 en menos de dos minutos en una computadora de escritorio razonable. (Nota: mi implementación de referencia en Java maneja 250000 en menos de 0.5 segundos, y mi implementación de referencia en Python lo maneja en 12 segundos).
Casos de prueba
Input Expected output
1 1
8 18
1000 6500
250000 2764000
1000000 12214770
3000000 39258256