Python 优化代码,以查找索引对(i,j)的数量,从而使i<=j和(a[i]&x2B;a[j])是二的和幂

Python 优化代码,以查找索引对(i,j)的数量,从而使i<=j和(a[i]&x2B;a[j])是二的和幂,python,Python,尝试使用2 for循环,但出现超时问题。数组也可以有负元素 def pairSummingToPowerOfTwo(a): if len(a)==1 and (a[0] and (not(a[0] & (a[0] - 1))) ): return 1 count = 0 for i in range(len(a)): for j in range(i, len(a)): sum = a

尝试使用2 for循环,但出现超时问题。数组也可以有负元素

def pairSummingToPowerOfTwo(a):
    
    if len(a)==1 and (a[0] and (not(a[0] & (a[0] - 1))) ):
        return 1
    
    count  = 0
    for i in range(len(a)):
        for j in range(i, len(a)):

            sum = a[i] + a[j]
            if (sum and (not(sum & (sum - 1)))):
                count += 1
                        
    return count

请建议优化方法

您可以优化嵌套循环,将值直接作为单个循环使用

for x, y in itertools.combinations_with_replacement(a, 2):
    sum = x + y
    # Rest of code unchanged

它处理
i输入的长度是多少?输入的值范围是多少?