diff --git a/Number Theory/Catalan_number.cpp b/Number Theory/Catalan_number.cpp index 85d50b7..514d26f 100644 --- a/Number Theory/Catalan_number.cpp +++ b/Number Theory/Catalan_number.cpp @@ -27,6 +27,6 @@ int catalanNumber( int n ){ int main(int argc, char* argv[] ){ - cout << catalanNumber(3) << '\n'; + cout << catalanNumber(2) << '\n'; return 0; } \ No newline at end of file diff --git a/Number Theory/Catalan_number.exe b/Number Theory/Catalan_number.exe new file mode 100644 index 0000000..95d821c Binary files /dev/null and b/Number Theory/Catalan_number.exe differ diff --git a/Number Theory/Catalan_number_formula.cpp b/Number Theory/Catalan_number_formula.cpp new file mode 100644 index 0000000..cbffb76 --- /dev/null +++ b/Number Theory/Catalan_number_formula.cpp @@ -0,0 +1,69 @@ +typedef long long int ll; + +ll mod = 998244353; + +vector factorial; +void calculateFactorial(ll n){ + factorial.resize(n+1); + + factorial[0] = factorial[1] = 1; + + for( ll i = 2 ; i <= n ; i++ ){ + factorial[i] = ( factorial[i-1] * i ) % mod; + } +} + +template +T modMul(T a,T b,T M=(ll)1e9+7){ + return ((a%M)*(b%M))%M; +} + +template +inline T power(T a, T b, T M) +{ + T x = 1; + while (b) + { + if (b & 1) x = modMul(x,a,M); + a = modMul(a,a,M); + b >>= 1; + } + return x; +} + +/* Using Fermat little Theorem */ +ll inverse(ll n ){ + return power( n , mod - 2 , mod ); +} + +vector inverse_factorial; +void calculateInverseFactorial(ll n){ + + inverse_factorial.resize(n+1); + inverse_factorial[0] = inverse_factorial[1] = 1; + + for( ll i = 2 ; i <= n ; i++ ){ + inverse_factorial[i] = (inverse(i)*inverse_factorial[i-1])%mod; + } +} + +ll nCr( ll n , ll r ){ + + // -- n! -- + // | ------------- | % mod + // -- n! * (n - r)! -- + + return ( ( ( factorial[n] * inverse_factorial[r] ) % mod + ) * inverse_factorial[n-r] ) % mod; +} + +/* Catalan Number */ +ll Cn( ll n ){ + + // -- 2n! -- + // | --------------- | % mod + // -- n! * n! * (n+1) -- + + return ( ( ( ( ( factorial[2*n] * inverse_factorial[n] ) % mod ) + * inverse_factorial[n] ) % mod ) * inverse( n + 1 ) ) % mod; +} \ No newline at end of file diff --git a/Number Theory/nCr_formula.cpp b/Number Theory/nCr_formula.cpp new file mode 100644 index 0000000..b5fb9ed --- /dev/null +++ b/Number Theory/nCr_formula.cpp @@ -0,0 +1,56 @@ +ll mod = 998244353; + +vector factorial; +void calculateFactorial(ll n){ + factorial.resize(n+1); + + factorial[0] = factorial[1] = 1; + + for( ll i = 2 ; i <= n ; i++ ){ + factorial[i] = ( factorial[i-1] * i ) % mod; + } +} + +template +T modMul(T a,T b,T M=(ll)1e9+7){ + return ((a%M)*(b%M))%M; +} + +template +inline T power(T a, T b, T M) +{ + T x = 1; + while (b) + { + if (b & 1) x = modMul(x,a,M); + a = modMul(a,a,M); + b >>= 1; + } + return x; +} + +/* Using Fermat little Theorem */ +ll inverse(ll n ){ + return power( n , mod - 2 , mod ); +} + +vector inverse_factorial; +void calculateInverseFactorial(ll n){ + + inverse_factorial.resize(n+1); + inverse_factorial[0] = inverse_factorial[1] = 1; + + for( ll i = 2 ; i <= n ; i++ ){ + inverse_factorial[i] = (inverse(i)*inverse_factorial[i-1])%mod; + } +} + +ll nCr( ll n , ll r ){ + + // -- n! -- + // | ------------- | % mod + // -- n! * (n - r)! -- + + return ( ( ( factorial[n] * inverse_factorial[r] ) % mod + ) * inverse_factorial[n-r] ) % mod; +} \ No newline at end of file