import sympy, itertools
lcm = lambda a, *b: sympy.lcm(a, lcm(*b)) if b else a
def f(n):
a = 2**n
if n < 2: return a
if sympy.isprime(n): return a - 2
factorization = sympy.factorint(n)
ff = [n / p for p in factorization]
for i in range(1, len(factorization) + 1):
a += (-1)**i * sum(2**lcm(*comb) for comb in itertools.combinations(ff, i))
return a