Skip to content

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)