from tools import gcd, factorization from itertools import count from math import exp, log
N = 10 ** 18 ans = 0 K = int((exp(0.57721566490153286) * log(log(N)) + 0.6483 / log(log(N)))*2)
defdfs(n: int, fz: int, fm: int): if n * fz > N or gcd(n, fm) != 1or fz < fm: return if fm == 1: if fz == 1: global ans ans += n return p = factorization(fm)[0][0] e = 1 while fm % p ** (e + 1) == 0: e += 1 for i in count(e, 1): nw = n * p ** i if nw > N: break new_fz = fz * p ** i new_fm = fm * (p ** (i + 1) - 1) // (p - 1) g = gcd(new_fz, new_fm) dfs(nw, new_fz // g, new_fm // g)