【X-Round 4】P5596

题解

一开始我尝试固定 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=a2k(k+b)(kb)

首先根据原式, k ≥ 0 k≥0 k0
其次,我们要保证 x ≥ 0 x≥0 x0,所以分子分母必须同号,且 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值