D - Staircase Sequences
https://atcoder.jp/contests/abc190/tasks/abc190_d
分解因数,枚举
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
set<pair<LL, LL>> st;
//(r + l)*(r - l + 1) = 2 * N;
// x * y = 2 * N;
//分解因子
int main() {
LL N;
scanf("%lld", &N);
N *= 2;
LL res = 0;
pair<LL, LL> t;
for(LL i = 1; i * i <= N; i++) { //别忘了i也要LL;
if(N % i == 0) {
LL x = i, y = N / i;
if((x + y - 1) % 2 == 0) {
LL r = (x + y - 1) / 2;
LL l = (x - r);
t.first = l, t.second = r;
if(l <= r && st.find(t) == st.end()) {
//printf("ok: %d %d\n", l, r);
res ++;
st.emplace(t);
}
swap(x, y);
l = (x - r);
t.first = l;
if(l <= r && st.find(t) == st.end()) {
//printf("ok: %d %d\n", l, r);
res ++;
st.emplace(t);
}
}
}
}
printf("%lld\n", res);
return 0;
}