Определения
Позвольте m
и n
быть положительными целыми числами. Мы говорим , что m
является делителем твист из , n
если существует целых чисел , 1 < a ≤ b
таких , что n = a*b
и m = (a - 1)*(b + 1) + 1
. Если m
может быть получена из n
применяя ноль или более делители завихрения к нему, то m
есть потомок из n
. Обратите внимание, что у каждого числа есть свой потомок.
Например, рассмотрим n = 16
. Мы можем выбрать a = 2
и b = 8
, так как 2*8 = 16
. потом
(a - 1)*(b + 1) + 1 = 1*9 + 1 = 10
который показывает, что 10
это поворот делителя 16
. С помощью a = 2
и b = 5
мы видим, что 7
это поворот делителя 10
. Таким образом, 7
является потомком 16
.
Задание
Учитывая положительное целое число n
, вычислите потомков n
, перечисленных в порядке возрастания, без дубликатов.
правила
Вы не можете использовать встроенные операции, которые вычисляют делители числа.
Принимаются как полные программы, так и функции, и разрешается возвращать тип данных коллекции (например, какой-то набор), если он отсортирован и не содержит дубликатов. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Тестовые случаи
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]
<
для натуральных чисел, для каждого n вы получаете каждое число меньше его, но не самого себя. Я думаю, что это должно быть что-то похожее. Таким образом, я думаю, что только 4 будет его собственным потомком (хотя и не уверен в этом).