Definicje
Pozwolić m
i n
być dodatnimi liczbami całkowitymi. Mówimy, że m
jest skręt dzielnik od n
jeśli istnieje liczby całkowite 1 < a ≤ b
takie, że n = a*b
i m = (a - 1)*(b + 1) + 1
. Jeśli m
może być uzyskane z n
stosując zero lub więcej skrętów dzielnik do niej, a następnie m
jest potomkiem z n
. Zauważ, że każda liczba jest własnym potomkiem.
Rozważmy na przykład n = 16
. Możemy wybrać a = 2
i b = 8
, ponieważ 2*8 = 16
. Następnie
(a - 1)*(b + 1) + 1 = 1*9 + 1 = 10
co pokazuje, że 10
jest to skręt dzielnika 16
. Za pomocą a = 2
i b = 5
widzimy, że 7
jest to zwrot dzielnika 10
. Zatem 7
jest potomkiem 16
.
Zadanie
Biorąc pod uwagę dodatnią liczbę całkowitą n
, oblicz potomków n
wymienionych w kolejności rosnącej, bez duplikatów.
Zasady
Nie wolno używać wbudowanych operacji obliczających dzielniki liczby.
Akceptowane są zarówno pełne programy, jak i funkcje, a zwracanie typu danych kolekcji (jak pewnego rodzaju zestawu) jest dozwolone, o ile jest ono posortowane i wolne od duplikatów. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
1 -> [1]
2 -> [2] (any prime number returns just itself)
4 -> [4]
16 -> [7, 10, 16]
28 -> [7, 10, 16, 25, 28]
51 -> [37, 51]
60 -> [7, 10, 11, 13, 15, 16, 17, 18, 23, 25, 28, 29, 30, 32, 43, 46, 49, 53, 55, 56, 60]
<
dla liczb naturalnych, za każdy n otrzymasz każdą liczbę mniejszą od niej, ale nie samą. Myślę, że to powinno być coś podobnego. W ten sposób myślę, że tylko 4 byłoby własnym potomkiem (choć nie jestem tego pewien).