Définition
Un entier positif n
est un nombre pratique (séquence OEIS A005153 ) si tous les entiers positifs plus petits peuvent être représentés comme des sommes de diviseurs distincts de n
.
Par exemple, 18
est un nombre pratique: ses diviseurs sont 1, 2, 3, 6, 9 et 18, et les autres entiers positifs inférieurs à 18 peuvent être formés comme suit:
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
Mais ce 14
n'est pas un nombre pratique: ses diviseurs sont 1, 2, 7 et 14, et il n'y a aucun sous-ensemble de ceux-ci qui s'ajoute à 4, 5, 6, 11, 12 ou 13.
Défi
Écrivez un programme, une fonction ou un verbe qui prend en entrée un entier positif x
et retourne ou imprime le x ème nombre pratique, indexé de 1 pour cohérence avec OEIS. Votre code doit être suffisamment efficace pour pouvoir gérer jusqu'à 250000 entrées en moins de deux minutes sur un ordinateur de bureau raisonnable. (NB mon implémentation de référence en Java gère 250000 en moins de 0,5 seconde, et mon implémentation de référence en Python le gère en 12 secondes).
Cas de test
Input Expected output
1 1
8 18
1000 6500
250000 2764000
1000000 12214770
3000000 39258256