예제 #1
0
파일: DIVISORS.py 프로젝트: vbonifaci/algo
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)
예제 #2
0
파일: DIVISORS.py 프로젝트: vbonifaci/algo
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)
예제 #3
0
파일: DIVISORS.py 프로젝트: vbonifaci/algo
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)
예제 #4
0
파일: DIVISORS.py 프로젝트: vbonifaci/algo
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)
예제 #5
0
파일: DIVISORS.py 프로젝트: vbonifaci/algo
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)