27273: 简单的数学题
implementation, math, http://cs101.openjudge.cn/practice/27273
小北邀请你做一道简单的数学题来活跃一下思维!在这个问题中,你要计算从1到n的所有整数的和,但是需要对2的所有次幂取负号。
例如,对于n = 4,和等于(-1) + (-2) + 3 + (-4) = -4,因为1、2和4分别是20, 21, 22。
你需要计算t组数据的答案。
输入
第一行为数据组数t (1 ≤ t ≤ 100)。
接下来的t行,每一行都为一个整数n(1 ≤ n ≤ 10^6)。
输出
输出t行,对于每一组数据计算的答案。
样例输入
2
4
18864样例输出
-4
177869146提示
tags: implementation, math 注:需要用高斯求和和等比数列来计算,枚举可能超时
来源: 2023fall tcy
python
import math
t = int(input())
for _ in range(t):
n = int(input())
if n % 2 == 1:
sumv = (1 + n - 1)*(n-1)//2 + n
else:
sumv = (1 + n)*n//2
maxp = int(math.log2(n))
for i in range(maxp+1):
sumv -= 2*(2**i)
print(sumv)