版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
正题
看到就很想移过去,然后用二次方程的性质来解。
,若右边的delta为0,那么就有无限个解,也就是说
因为abxy都是自然数,所以可以发现,很容易可以设出,其中k也是一个自然数。
带入可得:
当的时候,有,所以
直接判无限解了。
当时,有
上下必须同正负:
还要保证k是一个自然数,那么就有
这个东西就可以直接枚举了!
#include<bits/stdc++.h>
using namespace std;
long long a,b;
int main(){
scanf("%lld %lld",&a,&b);
if(a*a==4*b) {printf("inf");return 0;}
int x,y,ans;
if(a<2*sqrt(b)){
x=sqrt(b),ans=0;
for(long long i=(a%2==1?(a+1)/2:a/2+1);i<=x;i++) if((i*i-b)%(a-2*i)==0) ans++;
}
else{
x=ceil(sqrt(b)),y=(a%2==1?(a-1)/2:a/2-1),ans=0;
for(long long i=x;i<=y;i++) if((i*i-b)%(a-2*i)==0) ans++;
}
printf("%d",ans);
}