#include using namespace std; #define ll long long const ll mod=998244353; const int maxn=300005; ll fac[maxn+5],inv[maxn+5]; ll qmksm(ll a,ll b){ ll res; res=1; while(b){ if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res; } ll C(ll n,ll k){ if(k<0 or k>n) return 0; return fac[n]*inv[k]%mod*inv[n-k]%mod; } int main(){ ll t,n,a,ans,i,k,cur,zc,zc1,zc2; fac[0]=1; for(i=1;i<=maxn;i++) fac[i]=fac[i-1]*i%mod; inv[maxn]=qmksm(fac[maxn],mod-2); for(i=maxn-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod; scanf("%lld",&t); while(t--){ scanf("%lld%lld",&n,&a); ans=0; cur=n-1; for(i=1;i*i<=a;i++){ if(a%i==0){ k=i; zc=a/k; if((cur-zc)%2==0){ zc1=(cur-zc)/2; zc2=(cur+zc+2)/2; ans=(ans+C(cur,zc1)-C(cur,zc2)+mod)%mod; } if(i*i!=a){ k=a/i; zc=a/k; if((cur-zc)%2==0){ zc1=(cur-zc)/2; zc2=(cur+zc+2)/2; ans=(ans+C(cur,zc1)-C(cur,zc2)+mod)%mod; } } } } printf("%lld\n",ans); } return 0; }