题,X Round 4 Div1 T1,数学

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Deep_Kevin/article/details/102675549

正题

      Portal

      看到就很想移过去,然后用二次方程的性质来解。

       y^2=x^2+ax+b,若右边的delta为0,那么就有无限个解,也就是说a^2-4b=0

       因为abxy都是自然数,所以可以发现y>=x,很容易可以设出y=x+k,其中k也是一个自然数。

       带入可得:2kx+k^2=ax+b

       当2k=a的时候,有k^2=b,所以(\frac{a}{2})^2=b\to a^2-4b=0\to \Delta=0

       直接判无限解了。

       当2k!=a时,有x=\frac{b-k^2}{2k-a}

       上下必须同正负:b-k^2>=0 \& 2k-a>0 |b-k^2<=0 \& 2k-a<0

        还要保证k是一个自然数,那么就有\frac{a}{2}<x<=\sqrt b | \sqrt b<=x<\frac{a}{2}

        这个东西就可以直接枚举了!

#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);
}

猜你喜欢

转载自blog.csdn.net/Deep_Kevin/article/details/102675549