1 题目描述(题目链接)
2 题解
前
n
n
n项和减去二倍的等比数列前
m
m
m项和,
m
=
⌊
n
⌋
+
1
m = \lfloor n\rfloor + 1
m=⌊n⌋+1。
r
e
s
=
n
(
n
+
1
)
2
−
2
∗
(
2
m
−
1
)
res = \cfrac{n(n+1)}{2}-2*(2^m -1)
res=2n(n+1)−2∗(2m−1)
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll sum(ll n){
ll m, res;
m = floor(log(n)/log(2));
res = (1+n)*n/2 - 2*pow(2, m+1) + 2;
return res;
}
int main(int argc, const char * argv[]) {
// insert code here...
int t, i;
ll arr[100];
cin>>t;
for (i = 0; i < t; i++){
cin>>arr[i];
}
for (i = 0; i < t; i++){
cout<<sum(arr[i])<<endl;
}
return 0;
}
from math import floor, log2
t = int(input())
arr = []
for i in range(t):
n = int(input())
arr.append(n)
for n in arr:
print(n*(n+1)//2 - 2**(floor(log2(n))+2) + 2)