Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- #define ll long long
- #define sam unsigned long long int
- #define fr(i,n) for(ll i = 0; i < n; i++)
- using namespace std;
- ll mod = 1000000007;
- ll mulmod(ll a, ll b){
- return ( ( a % mod ) * ( b % mod ) ) % mod;
- }
- ll fast_pow(long long base, long long n,long long M)
- {
- if(n==0)
- return 1;
- if(n==1)
- return base;
- long long halfn=fast_pow(base,n/2,M);
- if(n%2==0)
- return ( halfn * halfn ) % M;
- else
- return ( ( ( halfn * halfn ) % M ) * base ) % M;
- }
- ll findMMI_fermat(ll n,ll M)
- {
- return fast_pow(n,M-2,M);
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- ll t;
- cin>>t;
- while(t--){
- ll n,k;
- cin>>n>>k;
- ll a = k , b = n + k -1;
- ll u = b - a;
- ll v = a - 1;
- ll d ;
- if(v%u != 0){
- d = v/u ;
- ll w = d+1;
- ll i,s = 0;
- ll su = 1;
- su = (su*w) %mod;
- su = (su*d) %mod;
- su = (su*u) %mod;
- // z=(x/y)%M;
- // y2=findMMI(y,M);
- // z=(x*y2)%M;
- ll y2 = findMMI_fermat(2,mod);
- ll y3 = (su * y2) % mod;
- s = mulmod(w,v) - y3;
- cout<<s%1000000007<<endl;
- }
- else{
- d = v/u;
- ll w = d-1;
- ll i,s = 0;
- ll su = 1;
- su = (su*w) %mod;
- su = (su*d) %mod;
- su = (su*u) %mod;
- // z=(x/y)%M;
- // y2=findMMI(y,M);
- // z=(x*y2)%M;
- ll y2 = findMMI_fermat(2,mod);
- ll y3 = (su * y2) % mod;
- s = mulmod(d,v) - y3;
- cout<<s%1000000007<<endl;
- }
- // for(i = 0 ; i<d ; i++){
- // s = s - i*(b) + v;
- // }
- }
- }
Add Comment
Please, Sign In to add comment