Python 如何得到正好有2个1';在其二进制表示的范围内?
我想找出一个范围内的数字之和,比如说N,它的二进制表示中正好有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 = 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吗?如果是,这是一个简单的组合问题,非常有效。非常有效。