Sum of Numerators

Sum of Numerators

题目链接
学习资料

题意:给定n,k;每一项ai/2k约分后, ∑ \sum 分子。

假设n = 8,k = 2;
初始分子:
1 2 3 4 5 6 7 8
res = (1+8) * 8 / 2 = 36
第一轮约分后:
1 1 3 2 5 3 7 4
[1-n]之间的偶数都减半
res -= (1+4) * 4/ 2 =26
第二轮约分后:
1 1 3 1 5 3 7 2
[1-n/2]之间的偶数都减半
res -= (1+2) * 2 / 2 = 23

直到!n || !k 截止;


Code:

int T; 
int main() {
	cin >> T;
	while(T--) {
		ll n,k;
		cin>>n>>k;
		ll sum = (1+n)*n/2;
		while(n&&k) {
			n>>=1;
			k--;
			sum -= (1+n)*n/2;
		}
		cout<<sum<<endl;
	}
	return 0;
}

题目变式:
可以每一项都除以3k,4k…做法同理

逆水行舟,不进则退~

你可能感兴趣的:(思维)