给定整数 \(n\),求 \((x,y)\) 使得:
令 \(x^2-y=k^2\),\(k\leq0\)。
得到 \(x^2-k^2=(x+k)(x-k)=y\)。
令 \(p=x+k\),\(q=x-k\),则:
枚举 \(q\),得到 \(p\) 的范围 \(\frac nq\leq p\leq q\) ,由于 \(q\) 一定不会超过 \(\sqrt n\)(\(q\leq p=\frac nq\)),所以在 \(O(\sqrt n)\) 内解决。
#include <cstdio>
#define int long long
const int MOD = 998244353;
int n, ans;
signed main() {
scanf("%lld", &n);
for (int i = 1; i <= n / i; i++)
ans = (ans + (n / i - i + 2) / 2) % MOD;
printf("%lld", ans);
return 0;
}
原文:https://www.cnblogs.com/C202202chenkelin/p/15177551.html