Code is taking too much time

后端 未结 4 1292
死守一世寂寞
死守一世寂寞 2020-12-17 07:02

I wrote code to arrange numbers after taking user input. The ordering requires that the sum of adjacent numbers is prime. Up until 10 as an input code is working fine. If I

4条回答
  •  渐次进展
    2020-12-17 07:47

    Dynamic programming, to the rescue:

    def is_prime(n):
        return all(n % i != 0 for i in range(2, n))
    
    def order(numbers, current=[]):
        if not numbers:
            return current
    
        for i, n in enumerate(numbers):
            if current and not is_prime(n + current[-1]):
                continue
    
            result = order(numbers[:i] + numbers[i + 1:], current + [n])
    
            if result:
                return result
    
        return False
    
    result = order(range(500))
    
    for i in range(len(result) - 1):
        assert is_prime(result[i] + result[i + 1])
    

    You can force it to work for even larger lists by increasing the maximum recursion depth.

提交回复
热议问题