第一步:数据范围大小,10^9
说明需要一个O(1)的算法
那么显然这是一个找规律的题目
第二步:找规律
平方数:1 4 9 16 25 …
差值: 1 3 5 7 9 … (所有奇数)
显然,符合要求的数,是由若干连续的奇数的和
–>奇数,是符合要求的数
–>偶数,如果能写成奇数的和,也符合
这是一步步探索时写的代码
def f(n):
count=0
if n%2:
count+=n//2+1
a=n//2
count+=a//2
else:
count+=n//2
a=n//2
count+=a//2
return count
res=f(r)-f(l-1)
print(res)
超级简化后的代码
def count(n):
return n - n // 2 + n // 4
l, r = map(int, input().split())
print(count(r) - count(l - 1))