POJ 2140
等差公式求和:(i*2+m)*(m+1)=2*n
枚举m+1,符合公式即可。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string.h> #include <queue> #include <cmath> #include <vector> using namespace std; int main(){ int n; while(scanf("%d",&n)!=EOF){ n=2*n; int t=int(sqrt(n*1.0)); int ans=0; for(int i=1;i<=t;i++){ if(n%i==0){ if((n/i-(i-1))%2==0) ans++; } } printf("%d\n",ans); } return 0; }