Python 如何得到正好有2个1';在其二进制表示的范围内?

Python 如何得到正好有2个1';在其二进制表示的范围内?,python,python-2.7,Python,Python 2.7,我想找出一个范围内的数字之和,比如说N,它的二进制表示中正好有2个1。我编写的代码如下: N = int(raw_input()) sum1 = 0 for i in range(1, N + 1): if bin(i)[2:].count('1') == 2: sum1 = sum1 + i 这段代码需要很多时间。有没有更快的方法进行计算 请尝试以下代码: def two_bit_numbers(N): bit0 = 0 bit1 = 1 whi

我想找出一个范围内的数字之和,比如说N,它的二进制表示中正好有2个1。我编写的代码如下:

N = int(raw_input())
sum1 = 0
for i in range(1, N + 1):
    if bin(i)[2:].count('1') == 2:
       sum1 = sum1 + i
这段代码需要很多时间。有没有更快的方法进行计算

请尝试以下代码:

def two_bit_numbers(N):
    bit0 = 0
    bit1 = 1
    while True:
        n = (1<<bit1) + (1<<bit0)
        if n > N:
            break
        yield n
        bit0 += 1
        if bit0 == bit1:
            bit1 += 1
            bit0 = 0

N = 100
sum1 = 0

for i in two_bit_numbers(N):
    # print i, bin(i)
    sum1 += i

print sum1
def两位数字(N):
比特0=0
比特1=1
尽管如此:
n=(1尝试以下代码:

def two_bit_numbers(N):
    bit0 = 0
    bit1 = 1
    while True:
        n = (1<<bit1) + (1<<bit0)
        if n > N:
            break
        yield n
        bit0 += 1
        if bit0 == bit1:
            bit1 += 1
            bit0 = 0

N = 100
sum1 = 0

for i in two_bit_numbers(N):
    # print i, bin(i)
    sum1 += i

print sum1
def两位数字(N):
比特0=0
比特1=1
尽管如此:

n=(1如果我们研究如何找到用二进制写时有两个“1”的数字,我们得到两种情况:

  • 我们有一个元素>1,在二进制表示中有1'1',我们向它添加1
  • 我们有一个元素,在二进制表示中有两个“1”,我们将它乘以2
因此,要查找与这种情况匹配的元素数量,您可以执行以下操作:

num = int(raw_input())
def get_numbers(N):
    sum1 = []
    sum2 = []
    i = 2
    while i < N:
        # we add the elements of case 2
        sum1.extend(sum2)
        # we add the element of case 1
        sum1.append(i+1)
        sum2 = [2*x for x in sum1 if x > i]
        # we check for the elements with one more number when written in binary
        i *= 2
    # sum1 now contains all elements with two '1' in binary between 0 and the power of 2 above N.
    # we remove the elements above N
    sum1 = [x for x in sum1 if x <= N]
    # we sort the list
    sum1.sort()
    # we take the length of the list, of the number of elements with two '1' in binary between 0 and N
    return sum1

 print(get_numbers(num))
num=int(原始输入()
def get_编号(N):
sum1=[]
sum2=[]
i=2
而ii]
#当用二进制写入时,我们检查是否有多个数字的元素
i*=2
#sum1现在包含二进制中两个“1”在0和N以上2的幂之间的所有元素。
#我们去掉N上面的元素

sum1=[x代表sum1中的x如果x如果我们看一下如何找到用二进制写时有两个“1”的数字,我们得到两种情况:

  • 我们有一个元素>1,在二进制表示中有1'1',我们向它添加1
  • 我们有一个元素,在二进制表示中有两个“1”,我们将它乘以2
因此,要查找与这种情况匹配的元素数量,您可以执行以下操作:

num = int(raw_input())
def get_numbers(N):
    sum1 = []
    sum2 = []
    i = 2
    while i < N:
        # we add the elements of case 2
        sum1.extend(sum2)
        # we add the element of case 1
        sum1.append(i+1)
        sum2 = [2*x for x in sum1 if x > i]
        # we check for the elements with one more number when written in binary
        i *= 2
    # sum1 now contains all elements with two '1' in binary between 0 and the power of 2 above N.
    # we remove the elements above N
    sum1 = [x for x in sum1 if x <= N]
    # we sort the list
    sum1.sort()
    # we take the length of the list, of the number of elements with two '1' in binary between 0 and N
    return sum1

 print(get_numbers(num))
num=int(原始输入()
def get_编号(N):
sum1=[]
sum2=[]
i=2
而ii]
#当用二进制写入时,我们检查是否有多个数字的元素
i*=2
#sum1现在包含二进制中两个“1”在0和N以上2的幂之间的所有元素。
#我们去掉N上面的元素

sum1=[x代表sum1中的x,如果x,你能假设N=2**M代表一些M吗?如果是,这是一个简单的组合问题,你能假设N=2**M代表一些M吗?如果是,这是一个简单的组合问题,非常有效。非常有效。