题解
一开始我尝试固定
y
y
y,但是得到关系式是无限的…
所以只能拿到
45
45
45
我们尝试令
y
=
x
+
k
y=x+k
y=x+k,
代入原式中:我们可以发现,
x
=
(
k
+
b
)
(
k
−
b
)
a
−
2
∗
k
x=\frac{(k+b)(k-b)}{a-2*k}
x=a−2∗k(k+b)(k−b)
首先根据原式,
k
≥
0
k≥0
k≥0
其次,我们要保证
x
≥
0
x≥0
x≥0,所以分子分母必须同号,且
k
≠
a
2
k≠\frac{a}{2}
k=2a
所以
k
k
k的范围在
(
b
,
a
2
)
(\sqrt{b},\frac{a}{2})
(b,2a)
但是谁在前,谁在后要根据实际情况判断。
并且边界要好好判【需要稍微判断下】
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
typedef long long ll;
ll a,b;
int main(){
cin>>a>>b;
if(a*a==4*b)puts("inf");
else{
int l=min(int(a)/2+1,ll(sqrt(b))*ll(sqrt(b))==b?int(sqrt(b)):int(sqrt(b))+1);
int r=max(int(a)%2?int(a)/2:max(int(a)/2-1,0),int(sqrt(b)));
int ans=0;
for(int i=l;i<=r;i++){
ll t=i;
if((t*t-b)%(a-2*t)==0)ans++;
}
cout<<ans<<endl;
}
}