Definicja
Dodatnia liczba całkowita n
jest liczbą praktyczną (sekwencja OEIS A005153 ) i wszystkie mniejsze liczby całkowite dodatnie mogą być reprezentowane jako sumy różnych dzielników n
.
Na przykład 18
jest liczbą praktyczną: jej dzielniki to 1, 2, 3, 6, 9 i 18, a inne dodatnie liczby całkowite mniejsze niż 18 można utworzyć w następujący sposób:
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
Ale 14
to nie jest liczba praktyczna: jej dzielniki to 1, 2, 7 i 14 i nie ma ich podzbioru, który dodaje 4, 5, 6, 11, 12 lub 13.
Wyzwanie
Napisz program, funkcję lub czasownik, który przyjmuje jako dane wejściowe dodatnią liczbę całkowitą x
i albo zwraca, albo wypisuje x- tą liczbę praktyczną, indeksowaną od 1 dla zgodności z OEIS. Twój kod musi być wystarczająco wydajny, aby mógł obsługiwać dane wejściowe do 250000 w mniej niż dwie minuty na rozsądnym komputerze stacjonarnym. (Uwaga: moja implementacja referencyjna w Javie zarządza 250000 w mniej niż 0,5 sekundy, a moja referencyjna implementacja w Pythonie zarządza nią w 12 sekund).
Przypadki testowe
Input Expected output
1 1
8 18
1000 6500
250000 2764000
1000000 12214770
3000000 39258256