I am a beginner don’t know much about modular arithmetic please tell if there is any logical problem in my solution or it is due to modular arithmetic :
https://www.codechef.com/viewsolution/24830452
a/2%mod=a*modinverse(2,mod)
what is modinverse can u tell me.
You must be getting overflow here use a larger int type.
I am alredy using long long int
you should have tried cpp_int from boost
use
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
and following to declare integer of larger size.
int128_t mod=1000000007;
This will create an integer of 128 bit. So no problem of overflow.
Use int128_t instead.
Hi, this can be narrowed down to a very simple one liner
#include <iostream>
#include <bits/stdc++.h>
#define ll long long int
#define MOD 1000000007
#define INV 500000004
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
ll n,k;
cin>>n>>k;
if(k==1){
cout<<0<<endl;
continue;
}
ll a = k;
ll s = n-1;
ll t = (a-2)%s;
ll cardinality = (((((((a-2)/s)+1)%MOD)*(((a%MOD+t%MOD)%MOD)%MOD))%MOD)*INV)%MOD;
cout<<cardinality<<endl;
}
return 0;
}
Thanks it worked learned something new.
Thank you it worked learne something new
Simple solution without using modular inverse.
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,n) for(int i(0);i<n;i++)
#define fast ios_base::sync_with_stdio(0); cin.tie(0);
#define mod 1000000007
#define pb push_back
#define all(v) v.begin(), v.end()
int cl(int a, int b){
if(a%b != 0)return (a - a%b + b)/b;
return a/b;
}
int32_t main() {
fast;
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
int terms = cl(k-1, n-1),ans;
ans = 2*(k-1) - (terms - 1)*(n-1);
if(terms&1){
ans/=2;
ans%=mod;
terms%=mod;
}
else{
terms/=2;
terms%=mod;
ans%=mod;
}
ans*=terms;
ans%=mod;
cout<<ans<<"\n";
}
return 0;
}
I did MOD as many times as I could do.
Is it something like if you use return type of main as int32_t, all int are considered as long long int? Can you explain this please? I had seen article (maybe on geeksforgeeks) somewhere but cant find it. Please mention resources if you find any! @satyankar_2005 @l_returns
or divide all even numbers beforehand by 2 and take mod
What I have done is defined int as a macro for long long int. But main function only returns int not a long long. So I have specified that a 32-bit integer int32_t will be used with main
Oh okay. Got it. Thanks But can you explain different between regular int and int32_t? They seems same. I searched a bit but didn’t found any satisfactory results. @satyankar_2005