ARC 125 B Squares

ARC 125 B Squares

1.题意

给定一个数N,1<=x,y<=N,使得x2-y为完全平方数,求(x,y)的数量k mod 998244353的值。

2.样例

输入1
3
输出1
2
输入2
10
输出2
8
输入3
10000000000
输出3
52583544

3.思路

设x2-y=z2,故x2-z2=y,可推出(x+z)(x-z)=y;
设a=(x+z),b=(x-z),故ab=y且(a+b)%2=0.
又因为y<=n,故a<=n,b<=n;
可推出:若a<=n且b<=n,则x<=n;
因为1<=b<=a并且ab<=n,所以b<=sqrt(n),故可以枚举b;
则a的范围为b<=a<=n/b,在此区间查找满足(a+b)%2=0的a的数量即可.
时间复杂度:O(sqrt(n)).

4.代码

#include<bits/stdc++.h>
using namespace std;
long long n,ans=0,mod=998244353;
long long f(long long x,long long y){
	return (y-x)/2+1;
}
int main(){
	scanf("%lld",&n);
	for(long long i=1;i<=sqrt(n);i++){
		ans+=f(i,n/i);
		ans%=mod;
	}
	printf("%lld",ans);
	return 0;
}
posted @ 2021-08-23 20:00  cqbz_xsh  阅读(56)  评论(0)    收藏  举报