Python 为什么我总是少记一次

Python 为什么我总是少记一次,python,algorithm,Python,Algorithm,我正在解决Codeforce中的一个问题,这是我以前提交的 #!/usr/local/bin/python limit = 10**18 string = raw_input() year1, year2 = string.split() year1 = int(year1) year2 = int(year2) x = 1 count = 0 a = [] while True: k = 2**x - 1 if k > limit: break

我正在解决Codeforce中的一个问题,这是我以前提交的

#!/usr/local/bin/python

limit = 10**18
string = raw_input()
year1, year2 = string.split()
year1 = int(year1)
year2 = int(year2)
x = 1
count = 0
a = []
while True:
    k = 2**x - 1

    if k > limit:
        break
    else:
        for i in xrange(len(bin(k)[2:])):
            if year1 <= k - (1 << i) <= year2 and len(bin(k - (1 << i))[2:].split('0')) == 2:
                count += 1
    x += 1
print count
它对该值起作用,但对另一个范围,
1
93582938502852935
又给出了一个较小的值

难怪无逻辑黑客不起作用,但我想知道为什么它以前只给出了一个较小的计数值?

我试图简化代码(它现在起作用,已被接受):

limit=10**19#此更改很重要,否则您将失去1个解决方案
#k>极限,且其存在使得k-(1极限:
打破
对于x范围(x-1)中的i:#k正好有x位,所以我们只有x-1机会设置零位
如果year1我试图简化代码(现在可以了,可以接受):

limit=10**19#此更改很重要,否则您将失去1个解决方案
#k>极限,且其存在使得k-(1极限:
打破
对于x范围(x-1)中的i:#k正好有x位,所以我们只有x-1机会设置零位

如果第1年您需要将
限制增加另一个数量级:

limit = 10**19

否则您将错过从
1152921504606846975-(110**18
)获得的
864691128455135231

您需要将
限制增加另一个数量级:

limit = 10**19

否则您将错过
864691128455135231
,从
1152921504606846975-(110**18
)获得

我不确定我是否正确理解您的问题,但您知道
范围(b)
将通过
b-1
生成值
0
是否正确?是的,我知道..这就是目的..位位置从0索引开始,运行比最大值少一个…少一个计数意味着比实际答案少一个计数值。我不确定我是否正确理解您的问题,但您知道
范围(b)
将通过
b-1
生成值
0
是否正确?是的,我知道..这就是目的..位位置从0索引开始,运行比最大值少一个…少一个计数意味着比实际答案少一个计数值。这有效吗?如果有效,请在答案中说明。如果无效,请删除它。有效吗?如果有效,请在yo中说明你的答案。如果没有,删除它。
limit = 10**19