Advertisement
Guest User

Untitled

a guest
Oct 30th, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<vector>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include<set>
  7. #include<cmath>
  8. #include<bitset>
  9. #include<map>
  10. #define test(t) while(t--)
  11. #define cin(n) scanf("%d",&n)
  12. #define cinl(n) scanf("%lld",&n)
  13.  
  14. #define cout(n) printf("%d\n",n)
  15. #define rep(i,a,n) for(i=a;i<=n;i++)
  16. #define vi vector<int>
  17. #define vii vector< vector<int> >
  18. #define vpii vector< pair<int,int> >
  19. #define mii map<int,int>
  20. #define pb push_back
  21. #define mp make_pair
  22. #define imax (int) 1000000007
  23. #define ill long long
  24. #define gc getchar_unlocked
  25. #include<stack>
  26. #define cin(n) scanf("%d",&n)
  27. #define cinl(n) scanf("%lld",&n)
  28.  #define mod 1000000007
  29. using namespace std;
  30. #define cout(n) printf("%d\n",n)
  31. ill powe(int aa,int b)
  32. {
  33.     ill ans=1;
  34.     ill a=aa*1LL;
  35.     while(b)
  36.     {
  37.         if(b&1)
  38.             ans=(ans*1LL*a)%mod;
  39.         a=(a*1LL*a)%mod;
  40.         b=b/2;
  41.     }
  42.     return ans;
  43. }
  44. int fac[1000008],ifac[1000008];
  45. int main()
  46. {
  47.     int t,m,n,i,j,k,l;
  48.     fac[0]=1;
  49.  
  50.     for(i=1;i<=1000000;i++)
  51.     {
  52.         ill val=(fac[i-1]*1LL*i)%mod;
  53.         fac[i]=int(val);
  54.     }
  55.  
  56.     ifac[0]=1;
  57.  
  58.     ifac[1000000]=powe(fac[1000000],mod-2);
  59.     for(i=1000000; i>0;i--)
  60.         ifac[i-1]=(long long)i*ifac[i]%mod;    
  61.     int z=0;
  62.    
  63.  
  64.     cin(t);
  65.    
  66.     while(t--)
  67.     {
  68.         cin(n);
  69.         cin(k);
  70.        
  71.         if(n==1)
  72.         {
  73.             cout<<"-1\n";
  74.             continue;
  75.         }
  76.         m=sqrt(k);
  77.         i=1;
  78.         ill anss=0LL;
  79.         int mm=m;
  80.        
  81.        
  82.         while(i<=mm)
  83.         {
  84.             ill ans=k/i-k/(i+1);
  85.             int z=i;
  86.             if((k/i)<=m)
  87.                 ans-=(m-k/i+1);
  88.            
  89.             ill val=fac[n+z-2];
  90.             val=(val*ifac[z-1])%mod;
  91.             val=(val*ifac[n-1])%mod;
  92.             //cout<<i<<" "<<val<<"\n";
  93.             ans=(ans*val)%mod;
  94.             anss=(anss+ans)%mod;
  95.             i++;
  96.         }
  97.        
  98.        
  99.            
  100.            ill val=fac[n+m-1];
  101.            val=(val*ifac[m-1])%mod;
  102.            val=(val*ifac[n])%mod;
  103.            anss=(anss+val)%mod;
  104.        
  105.        
  106.         cout<<anss<<"\n";
  107.     }
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement