1215: 毛毛的数学问题(2) [数学]
时间限制: 1 Sec 内存限制: 128 MB
提交: 32 解决: 5
[提交][状态][讨论版]
题目描述
毛毛是个喜欢数学的小萝莉,她发现对于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
来源
纯真
由等差公式 : (b−a+1)(a+b)=n * 2;
y1 = b - a + 1;
y2 = a + b;
b = (y1 + y2- 1) / 2;
a = (y2 - y1 + 1) / 2;
由题意可知 : y1 > 1 ,y2 <= n;
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL N;
while(scanf("%lld",&N) != EOF){
LL ans = 0;
for(int i = 2 ; i * i < 2 * N ; i++){
LL p = 2 * N / i;
if(2 * N % i == 0 && (p + i - 1) % 2 == 0 && (p - i + 1) % 2 == 0)
ans++;
}
printf("%lld\n",ans);
}
return 0;
}