首页 > 其他 > 详细

[题解] ARC125B Squares

时间:2021-08-23 22:49:23      阅读:24      评论:0      收藏:0      [点我收藏+]

题目链接

题意

给定整数 \(n\),求 \((x,y)\) 使得:

  1. \(1\leq x,y\leq n\)
  2. \(x^2-y\) 是一个平方数。

思路

\(x^2-y=k^2\)\(k\leq0\)

得到 \(x^2-k^2=(x+k)(x-k)=y\)

\(p=x+k\)\(q=x-k\),则:

  1. \(x=\frac{p+q}{2}\),则 \(p\equiv q\mod 2\)\(1\leq \frac{p+q}{2}\leq n\)
  2. \(y=pq\),则 \(p=\frac yq\)
  3. \(q\leq p\),则 \(p\geq\frac nq\)

枚举 \(q\),得到 \(p\) 的范围 \(\frac nq\leq p\leq q\) ,由于 \(q\) 一定不会超过 \(\sqrt n\)\(q\leq 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;
}

[题解] ARC125B Squares

原文:https://www.cnblogs.com/C202202chenkelin/p/15177551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!