вот мое решение:
сначала вам нужно найти уровень n и значение (min, max) этого уровня
ex: n = 2 => level = 2, min, max = (2, 3)
или если n = 5 => level = 3, min, max = (4, 9)
while max < x:
min = max + 1
if level % 2 == 1: # odd
n *= 2
max += n
else: # even
n *= 3
max += n
level += 1
, то мы разделяем всечисла в этих уровнях в пары по 2 или 3 зависят от уровня, в котором мы находимся (пара = 3 для нечетных уровней и пара = 2 для четных) и находят индекс пары, которая имеет n
pos = ceil( (x - min + 1) / pair )
с помощью этих 2 формул мы можем написать функцию, которая возвращает массив (min, max, level, pair)
, тогда мы можем найти родителя n, используя:
a = f(n)
b = f(a[0] - 1)
parent = b[0] + a[3] - 1
здесь, если n= 16 тогда родитель = 7
все, что вам нужно сделать, это продолжать использовать parent, чтобы найти другого родителя n, пока не достигнете 1