Python XOR和求和迭代太慢?

Python XOR和求和迭代太慢?,python,performance,bit-manipulation,Python,Performance,Bit Manipulation,我遇到了以下问题:给定s和x,计算同时满足1)s=a+b和2)x=a XOR b的解的数目(a,b)。所有数量和运算都是整数 Example Inputs: s = 10 x = 4 Output: 2 无法导入任何模块 我写了以下答案,都花了太长时间: 第一: def answer(s,x): tally = 0 z = 0 while z <= s: p = s - z q = int(z ^ p)

我遇到了以下问题:给定s和x,计算同时满足1)s=a+b和2)x=a XOR b的解的数目(a,b)。所有数量和运算都是整数

Example Inputs:
    s = 10
    x = 4
Output:
    2
无法导入任何模块

我写了以下答案,都花了太长时间:

第一:

def answer(s,x):
    tally = 0
    z = 0
    while z <= s:
        p = s - z
        q = int(z ^ p)
        if x == q:
            tally += 1
        z += 1
    return tally
第三:

def answer(s,x):
    tally = 0
    z = 0
    while z <= s:
        q = int(z ^ (s - z))
        if x == q:
            tally += 1
        else:
            pass
        z += 1
    print tally
def应答(s,x):
计数=0
z=0
而z如果(a,b)是溶液对,那么(b,a)也是溶液对,因此可以将测试范围减少一半。此外,您还可以利用这样一个事实,即如果
x=a^b
那么
b=x^a

下面的代码比第一个
answer()
函数快一倍多
使用
s,x=10,4
,速度快4倍以上 使用
s,x=255,255

def xorsum(s, x):
    tally = 0
    for a in xrange(s//2 + 1):
        tally += s - a == x ^ a 
    return 2 * tally
此函数使用Python的
False
True
分别具有0和1的数值这一事实。这样做比使用
if
测试更快,如果测试为真,则只增加
tall


您可以使用列表来实现
xorsum

def xorsum_lc(s, x):
    return 2 * sum([s - a == x ^ a for a in xrange(s//2 + 1)])

但是它比上面的函数慢;等效的生成器表达式甚至更慢(如预期的那样)。

您似乎遗漏了问题的关键部分。您还没有说明为什么要迭代。听起来好像问题不是你说的,而是你应该考虑一些价值观。这个问题的根源是什么?可能重复的@thebjorn有一个;注意集合的使用、缓存和防止额外的查找:查看副本以了解无法对所有值进行求和和和异或的原因。我对问题陈述进行了广泛的编辑,因为我发现原始语句令人困惑。有人应该仔细检查一下。你在考虑什么样的“整数”?如果它是一个具有固定位数的换行整数,那么iff(a,b)是一个解决方案,(a^signbit,b^signbit)也是一个解决方案。谢谢你的上述代码,它大大加快了我的处理时间。
def xorsum_lc(s, x):
    return 2 * sum([s - a == x ^ a for a in xrange(s//2 + 1)])