1. 程式人生 > >poj 2140 Herd Sums(等差數列)

poj 2140 Herd Sums(等差數列)

style turn color math 數列求和 amp 發現 for bsp

題目鏈接:http://poj.org/problem?id=2140

題意:給出n,求一共有多少個連續的數滿足加和恰好得到n,

思路:這題想了好久一開始以為是打表找規律,後來才發現與等差數列有關。。。(這題也可以用DP來做)

根據等差數列求和公式S=(a1+an)*n/2和末項公式an=a1+(n-1)*d(d位公差)得a1=(2*s+n-n*n)/2/n;得出求a1的公式然後對所有的n(n為項數)進行枚舉,得出結果

2*s=(2*a1+n-1)*n,因為2*S必為偶數所以n為偶數或者(2*a1+n-1)為偶數且a1不等於0

#include <iostream>
#include <cmath>

using
namespace std; int n,m; int main() { ios::sync_with_stdio(false); cin>>n; int N=sqrt(2*n); int ans=0; for(int i=1;i<=N;i++) { m=(2*n-i*(i-1))/2/i; if(2*n==(2*m*i+i*i-i)&&m>0&&(i%2==0||(2*m+i-1)%2==0)) { ans++; } } cout
<<ans<<endl; return 0; }

poj 2140 Herd Sums(等差數列)