需要用到等差数列的性质,再稍微减减枝就可以了。只要能想到这些,写出来没难度。
令 $a < b$ ,a为首项,b为末项,为等差数列,公差为1。
则有 $(a+b)*(b-a+1)/2=n$。
即 $(a+b)*(b-a+1)=2*n$。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include<iostream> using namespace std; int main() { long long n; cin >> n; for (long long a = 1; a <= n/2; a++) { for (long long b = a; b <= n/2+1; b++) { long long l = (a + b)*(b - a + 1); if (l == 2 * n)cout << a << " " << b << endl; if (l > 2 * n)break; } } } |