题目链接:点击打开链接
[数学]
时间限制: 1 Sec
内存限制: 128 MB
提交: 31
解决: 4
[
提交][
状态][
讨论版]
题目描述
毛毛是个喜欢数学的小萝莉,她发现对于21可以由 1+2+3+4+5+6, 6+7+8, 10+11等3组长度大于等于2的连续序列相加得到。
那么对于一个正整数N,你可以帮毛毛找出N可以有几组连续的正整数(长度>=2)相加得到吗?
输入
有多组测试数据,每一组输入一个正整数N(1 <= N <= 1 000 000 000)
输出
输出这些长度大于等于2的连续正整数序列的个数,每组输出占一行。
样例输入
1
2
3
4
21
样例输出
0
0
1
0
3
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n;
bool judge(int x)
{
if(2*n%x)
return 0;
int y=2*n/x;
int a=y-x+1;
int b=x+y-1;
if(a%2==0&&b%2==0&&(a!=b))
return 1;
return 0;
}
int main()
{
while(~scanf("%d",&n))
{
int ans=0;
for(int i=1;i*i<=2*n;i++)
{
if(judge(i))
{
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}