B 求和
Time Limit: 3000/1000 MS (Java/Others)
问题描述
对于正整数n,k,我们定义这样一个函数,它满足如下规律
现在给出n和k,你的任务就是要计算的值。
输入
首先是一个整数T,表示有T组数据
接下来每组数据是n和k()
输出
打印出f(n, k)的值,每个输出单独占一行
样例输入
3
1 1
2 1
3 1
样例输出
-1
1
-2
#include <iostream>
using namespace std;
int main(){
long long T,n,k;
cin>>T;
while(T--){
cin>>n>>k;
long long sum=0;//注意要用long long
long long i,j;
long long num=n/k;
if(num%2==0){
sum=num/2*k*k;
i=num*k+1;
for(;i<=n;i++){
sum=sum-i;
}
}else{
--num;
sum=num/2*k*k;
i=num*k+1;
sum=sum+(-2*i-k+1)*k/2;
i=(num+1)*k+1;
for(;i<=n;i++){
sum=sum+i;
}
}
cout<<sum<<endl;
}
return 0;
}