把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;
}