因数相关
C. Physical Education Lesson(1500)
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll ced(ll m,ll l){
ll res=0;
for(ll i=1;i*i<=m;i++){
if(m%i==0){
if(i%2==0&&i>=l){res++;
}ll j=m/i;
if(j!=i&&j%2==0&&j>=l)res++;
}
}return res;
}
//需要找到有多少个不同的 k 值,能满足方程 (2k-2)t+x=n(存在某个非负整数 t)。
//不难发现,该等式成立当且仅当 n-x 能被 2k-2 整除。
//因此,我们需要先找出数字 n-x 的偶数除数的数量。
//(2k-2)+t+2k+x →
//整理得 n+x-2=(2k-2)?(t+1) → 2k-2 是 n+x-2 的约数。
int main(){
int t;cin>>t;
while(t--){
int n,x;
cin>>n>>x;
ll d=n-x;
ll l1=max(2ll,2ll*(x-1));
ll cnt1=ced(d,l1);
ll cnt2=0;
ll e=n+x-2;
if(x>=2){
ll l2=2ll*x;
cnt2=ced(e,l2);
}cout<<cnt1+cnt2<<'\n';
}
}