Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<cstdio>
- #include<iostream>
- #include<vector>
- #include<cstring>
- #include<algorithm>
- #include<set>
- #include<cmath>
- #include<bitset>
- #include<map>
- #define test(t) while(t--)
- #define cin(n) scanf("%d",&n)
- #define cinl(n) scanf("%lld",&n)
- #define cout(n) printf("%d\n",n)
- #define rep(i,a,n) for(i=a;i<=n;i++)
- #define vi vector<int>
- #define vii vector< vector<int> >
- #define vpii vector< pair<int,int> >
- #define mii map<int,int>
- #define pb push_back
- #define mp make_pair
- #define imax (int) 1000000007
- #define ill long long
- #define gc getchar_unlocked
- #include<stack>
- #define cin(n) scanf("%d",&n)
- #define cinl(n) scanf("%lld",&n)
- #define mod 1000000007
- using namespace std;
- #define cout(n) printf("%d\n",n)
- ill powe(int aa,int b)
- {
- ill ans=1;
- ill a=aa*1LL;
- while(b)
- {
- if(b&1)
- ans=(ans*1LL*a)%mod;
- a=(a*1LL*a)%mod;
- b=b/2;
- }
- return ans;
- }
- int fac[1000008],ifac[1000008];
- int main()
- {
- int t,m,n,i,j,k,l;
- fac[0]=1;
- for(i=1;i<=1000000;i++)
- {
- ill val=(fac[i-1]*1LL*i)%mod;
- fac[i]=int(val);
- }
- ifac[0]=1;
- ifac[1000000]=powe(fac[1000000],mod-2);
- for(i=1000000; i>0;i--)
- ifac[i-1]=(long long)i*ifac[i]%mod;
- int z=0;
- cin(t);
- while(t--)
- {
- cin(n);
- cin(k);
- if(n==1)
- {
- cout<<"-1\n";
- continue;
- }
- m=sqrt(k);
- i=1;
- ill anss=0LL;
- int mm=m;
- while(i<=mm)
- {
- ill ans=k/i-k/(i+1);
- int z=i;
- if((k/i)<=m)
- ans-=(m-k/i+1);
- ill val=fac[n+z-2];
- val=(val*ifac[z-1])%mod;
- val=(val*ifac[n-1])%mod;
- //cout<<i<<" "<<val<<"\n";
- ans=(ans*val)%mod;
- anss=(anss+ans)%mod;
- i++;
- }
- ill val=fac[n+m-1];
- val=(val*ifac[m-1])%mod;
- val=(val*ifac[n])%mod;
- anss=(anss+val)%mod;
- cout<<anss<<"\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement