令首项为\(x\),长度为\(l\)由等差数列求和式可得:
$$s=\frac{l(l-1)}{2}+l*x$$
故,题意等价于求:
使得式子:
$$2s=l(l-1+2x)$$
成立的最小\(x\)
即求使得式子成立的最大\(l\)
又,易知:
$$l<\sqrt{2s},s\le10^{12}$$
故,
$$l<10^{6}$$
显然这个复杂度是可以接受的。
#include<iostream>
#include<cstdio>
#include<cmath>
long long s;
inline void init(){
scanf("%lld",&s);
long long ans=0,len;
for(long long i=1;i*i<=2*s;++i){
if((2*s%i==0)&&(2*s/i-i+1>0)&&((s-(i*(i-1)/2))%i==0)){
len=i;ans=((2*s)/i-i+1)>>1;
}
}
printf("%lld %lld",ans,ans+len-1);
}
int main(){
init();
return 0;
}