What is the most efficient way to find amicable numbers in python?

后端 未结 6 770
花落未央
花落未央 2020-12-19 23:13

I\'ve written code in Python to calculate sum of amicable numbers below 10000:

def amicable(a, b):
   total = 0
   result = 0
   for i in range(1, a):
               


        
6条回答
  •  -上瘾入骨i
    2020-12-20 00:00

    optimized to O(n)

    def sum_factors(n):  
         result = []
         for i in xrange(1, int(n**0.5) + 1):
             if n % i == 0:
                 result.extend([i, n//i])
         return sum(set(result)-set([n]))
    
    def amicable_pair(number):
        result = []
        for x in xrange(1,number+1):
            y = sum_factors(x)
            if sum_factors(y) == x and x != y:
                result.append(tuple(sorted((x,y))))
        return set(result)
    

    run it

    start = time.time()
    print (amicable_pair(10000))
    print time.time()-start
    

    result

    set([(2620, 2924), (220, 284), (6232, 6368), (1184, 1210), (5020, 5564)])
    0.180204153061
    

    takes only 0.2 seconds on macbook pro

提交回复
热议问题