1 条题解
-
0
C++ :
#include <cstdio> /* 段长 L(>=2)首项 a = (M - L(L-1)/2) / L,要求整除且 a >= 1。 L 越大 a 越小,故按 L 从大到小枚举即得首项升序。 */ int main(){ long long M; if(scanf("%lld", &M) != 1) return 0; long long Lmax = 1; while((Lmax + 1) * Lmax / 2 < M) Lmax++; for(long long L = Lmax; L >= 2; L--){ long long rest = M - L * (L - 1) / 2; if(rest % L) continue; long long a = rest / L; if(a >= 1) printf("%lld %lld\n", a, a + L - 1); } return 0; }
- 1
信息
- ID
- 2818
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者