B - Squares(平方差)
思路:
如题要求 x 2 − y = z 2 x^2-y=z^2 x2−y=z2, z z z的个数,我们将其化为: x 2 − z 2 = y x^2-z^2=y x2−z2=y,则求的是平方数之间的差值有多少不同的情况,易知差值其为等差数列,枚举平方数之间的间隔,通过公式来计算答案。
代码:
#include <iostream>
using namespace std;
typedef long long ll;
const ll mod=998244353;
ll n;
int main(){
cin>>n;
ll ans=0;
ll s=0;
for(ll i=1;;i++){
s+=2;
if(n-(i*i-s)<0) break;
ans=(ans+(n-(i*i-s))/s)%mod;
}
printf("%lld\n",ans);
}