建设赚钱的网站,动态Js文件 做网站标题,成都做网站建设公司,陶瓷网站建设中企动力等差数列 发布时间: 2017年6月25日 13:42 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 给定正整数n#xff0c;试问存在多少个和为n的等差数列#xff1f; 当然#xff0c;等差数列中每一项要为非负整数#xff0c;且不考虑降序的等差数列。… 等差数列 发布时间: 2017年6月25日 13:42 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 给定正整数n试问存在多少个和为n的等差数列 当然等差数列中每一项要为非负整数且不考虑降序的等差数列。 输入 多组输入数据不超过1000组。 每组数据一个正整数n,1≤n≤109。 输出 每组数据输出一个数表示答案。 样例输入1 4
5 样例输出1 5
5 提示 对于第一组数据 44 044 134 224 11114 共存在5个等差数列 题解这道题目是真的麻烦公式推导特别多 代码 #include iostream
#include cmath
#include cstdio
#include cstring
#include map
typedef long long LL;
using namespace std;
const int MAX 1e6;
mapint,int vis;
using namespace std;
LL n;
int dfs(int k){if(vis[k] || k n){return 0;}vis[k] 1;if(k 1){return 1;}if(k 2){return 0;}LL t 2*n/k;LL r t / (k-1);if(t % 2 0){if(k%2){return r 1;}else{return r/2 1;}}else{if(k%2){return 0;}else{return (r1)/2;}}
}
int main(){while(~scanf(%lld,n)){vis.clear();if(n 1){puts(2);continue;}if(n 2){puts(3);continue;}LL s sqrt(2*n);LL ans 0;for(LL i 1;i s;i){if(2*n%i 0){ans dfs(i);if(i*i ! 2*n)ans dfs(2*n/i);}} ans n/21;printf(%lld\n,ans);}return 0;
}