Project Euler – Problem 21
2012-05-05 08:32
302 查看
For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
Evaluate the sum of all the amicable numbers under 10000.
计算因子和的算法太慢,参照Project Euler大牛给出的算法,可以提高很多速度。
Evaluate the sum of all the amicable numbers under 10000.
def d(n): s = 1 for i in range(2, n//2 + 1): if n % i == 0: s += i return s def o(n): s = 0 for i in range(2, n): dn = d(i) if d(dn) == i and i < dn: s += i s += dn return s
计算因子和的算法太慢,参照Project Euler大牛给出的算法,可以提高很多速度。
def SumOfDivisors(n): s = 1 p = 2 while p*p <=n and n > 1: if n%p == 0: j = p * p n //= p while n % p == 0: j *= p n //= p s *= (j-1) s //= (p-1) if p == 2: p = 3 else: p += 2 if n > 1: s *= (n + 1) return s
相关文章推荐
- Project Euler:Problem 21 Amicable numbers
- [Project Euler] Problem 21
- [Project Euler] Problem 21
- 【巧妙】【3-21个人赛】Problem C 01串
- Project Euler - Problem 8
- [Project Euler] Problem 57
- Project Euler题解(Problem 1)
- Project Euler:Problem 28 Number spiral diagonals
- Project Euler:Problem 63 Powerful digit counts
- Project Euler:Problem 62 Cubic permutations
- Project Euler:Problem 67 Maximum path sum II
- Project Euler:Problem 79 Passcode derivation
- Project Euler:Problem 93 Arithmetic expressions
- 【Project Euler】【Problem 5】Smallest multiple
- Project Euler:Problem 28 Number spiral diagonals
- Project Euler:Problem 2
- [Project Euler]加入欧拉 Problem 10
- [Project Euler] Problem 5
- [Project Euler] Problem 28
- Project Euler__problem 1