def sum_divisors(n, primes): # sum of divisors of n if n == 1: return 1 p, k, m = FACTOR.factor(n, primes) return ((p ** (k+1) - 1)//(p - 1)) * sum_divisors(m, primes)
def divisors(n, primes): # number of divisors of n if n == 1: return 1 p, k, m = FACTOR.factor(n, primes) return (1+k) * divisors(m, primes)
def euler_phi(n, primes): # number of a (1 <= a <= n) such that gcd(a,n) == 1 if n == 1: return 1 p, k, m = FACTOR.factor(n, primes) return (p ** (k-1)) * (p-1) * euler_phi(m, primes)
def moebius(n, primes): # (-1)^(number of primes dividing n) if n square-free; 0 otherwise if n == 1: return 1 p, k, m = FACTOR.factor(n, primes) return [-1,0][k >= 2] * moebius(m, primes)
def prime_parity(n, primes): # (-1)^(number of distinct primes dividing n) if n == 1: return 1 p, k, m = FACTOR.factor(n, primes) return (-1) * prime_parity(m, primes)