Definizione
Un numero intero positivo n
è un numero pratico (sequenza OEIS A005153 ) se tutti i numeri interi positivi più piccoli possono essere rappresentati come somme di divisori distinti di n
.
Ad esempio, 18
è un numero pratico: i suoi divisori sono 1, 2, 3, 6, 9 e 18 e gli altri numeri interi positivi inferiori a 18 possono essere formati come segue:
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
Ma 14
non è un numero pratico: i suoi divisori sono 1, 2, 7 e 14 e non esiste alcun sottoinsieme di questi che si aggiunge a 4, 5, 6, 11, 12 o 13.
Sfida
Scrivere un programma, una funzione o verbo che prende in ingresso un numero intero positivo x
e sia i ritorni o stampe il x th numero pratico, indicizzato da 1 per coerenza con OEIS. Il codice deve essere sufficientemente efficiente da poter gestire input fino a 250000 in meno di due minuti su un computer desktop ragionevole. (NB la mia implementazione di riferimento in Java gestisce 250000 in meno di 0,5 secondi e la mia implementazione di riferimento in Python lo gestisce in 12 secondi).
Casi test
Input Expected output
1 1
8 18
1000 6500
250000 2764000
1000000 12214770
3000000 39258256