1625: 【基础】连续数的和(1560)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:20 解决:9

题目描述

给出两个整数n和k,(2≤n≤70000,1≤k≤n),求出1,2,3,…,n中连续k个数的和,并计算出和为平方数的个数。

例如n=10,k=3。在1,2,…,10中,连续3个数的和有

1+2+3=6

2+3+4=9

3+4+5=12

4+5+6=15

5+6+7=18

6+7+8=21

7+8+9=24

8+9+10=27

其中和为平方数的仅有9,因为9=3×3。

输入

n,k两个整数。

输出

一个整数,即1,2,…,n中连续k个数的和为平方数的个数。

样例输入 复制

10 3

样例输出 复制

1

提示

#include<bits/stdc++.h>
using namespace std;
const int N=70010;
int n,k,b[N],ans=0;
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++) b[i]=b[i-1]+i;
    for(int i=1;i<=n-k+1;i++) {
    	int t=b[i+k-1]-b[i-1];
    	if (sqrt(t)==(int)sqrt(t)) ans++;
	}
	cout<<ans;
	return 0;
}