51Nod 1138 连续整数的和

来源:互联网 发布:阿里云学生服务器饥荒 编辑:程序博客网 时间:2024/05/29 09:47

把n项连续的求和公式写出来 n=len*a1+len*(len-1)/2  len代表长度

变形一下。len最大取sqrt(2*n) 然后遍历求a1

#include<iostream>  #include<queue>  #include<vector>  #include<stack>  #include<algorithm>#include<cmath> #include<set>#include<map>#include<cstdio>using namespace std;int main(){long long n;cin>>n;int fz=sqrt(2*n);long long out[fz+10],cnt=0;for(;fz>=2;fz--){if((n-fz*(fz-1)/2)%fz==0){out[cnt++]=(n-fz*(fz-1)/2)/fz;}}for(int i=0;i<cnt;i++) cout<<out[i]<<endl;if(cnt==0) cout<<"No Solution"<<endl;return 0;}


原创粉丝点击