题意
给定整数 (n),求 ((x,y)) 使得:
- (1leq x,yleq n)。
- (x^2-y) 是一个平方数。
思路
令 (x^2-y=k^2),(kleq0)。
得到 (x^2-k^2=(x+k)(x-k)=y)。
令 (p=x+k),(q=x-k),则:
- (x=frac{p+q}{2}),则 (pequiv qmod 2),(1leq frac{p+q}{2}leq n)
- (y=pq),则 (p=frac yq)。
- (qleq p),则 (pgeqfrac nq)。
枚举 (q),得到 (p) 的范围 (frac nqleq pleq q) ,由于 (q) 一定不会超过 (sqrt n)((qleq p=frac nq)),所以在 (O(sqrt n)) 内解决。
Code
#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;
}