from sympy import prime, factorint, floor, log def A(n): return n - 2**int(floor(log(n, 2))) def b(n): return n + 1 if n<2 else prime(1 + (len(bin(n)[2:]) - bin(n)[2:].count("1"))) * b(A(n)) def P(n): f = factorint(n) return sorted([f[i] for i in f]) def a046523(n): x=1 while True: if P(n) == P(x): return x else: x+=1 def a278222(n): return a046523(b(n)) def a254104(n): if n==0: return 0 if n%3==0: return 1 + 2*a254104(2*n/3 - 1) elif n%3==1: return 1 + 2*a254104(2*(n - 1)/3) else: return 2*a254104((n - 2)/3 + 1) def a(n): return a278222(a254104(n))