poj-2140-Herd Sums- 数学规律-连续和为N的方案数

来源:互联网 发布:残疾人产品设计 知乎 编辑:程序博客网 时间:2024/05/01 21:55

给出n,求   如果  一系列连续的数加起来能恰好得到n,为一种方案,求方案数

http://poj.org/problem?id=2140


设 a,a+1,a+2....a+k =n

那么有 (k+1)*a+k*(k+1)/2=n;

(k+1)*(2*a+k)=2*n

如果(2*a+k),k+1是2*n因子;


我们只需要找出 2*n的所有因子,并判断 (2*a+k)能否被整除即可


 

 #include <cmath>#include <cstdio>#include <cstring>#include <limits>#include <string>#include <iostream>#include <list>#include <set>#include <map>#include <queue>#include <stack>#include <algorithm> using namespace std;int main(){int n;cin>>n;n=n*2;int ans=0;int i;int len=sqrt(double(n));for (i=1;i<=len;i++){if (n%i==0){if ((n/(i)-i+1)%2==0)ans++;}}printf("%d\n",ans); return 0;  }


0 0