C++ 中是否有计算 nCr 的内置函数?
Is there a built-in function to calculate nCr in C++?
在python3.8中,内置了计算组合数的函数(nCr(n, k)):
>>>from math import comb
>>>comb(10,3)
120
C++有这样的函数吗?
数学库中的 beta
函数可用于表示二项式系数(又名 nCr)。
double binom(int n, int k) {
return 1/((n+1)*std::beta(n-k+1,k+1));
}
此函数可用于 C++17 或作为 C++ 数学特殊函数扩展实现的一部分 (ISO/IEC 29124:2010)。在后一种情况下,您的实施可能需要您在包含 <cmath>
header 之前 #define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
才能使该功能可用。
请注意,与 Python 不同,C++ 不支持 built-in 大整数,因此首先使用浮点运算可能是一个不错的选择。
免责声明:如果使用 C++17,请使用 @ComicSansMS 中描述的 beta
函数,否则您可以使用 tgamma
甚至 lgamma
函数,如果使用C++11
使用lgamma
:
double comb_l(double n, double k) {
return std::exp(std::lgamma(n + 1)- std::lgamma(k + 1) - std::lgamma(n - k + 1));
}
使用tgamma
:
double comb_t(double n, double k) {
return std::tgamma(n + 1) / std::tgamma(k + 1) / std::tgamma(n - k + 1));
}
在python3.8中,内置了计算组合数的函数(nCr(n, k)):
>>>from math import comb
>>>comb(10,3)
120
C++有这样的函数吗?
数学库中的 beta
函数可用于表示二项式系数(又名 nCr)。
double binom(int n, int k) {
return 1/((n+1)*std::beta(n-k+1,k+1));
}
此函数可用于 C++17 或作为 C++ 数学特殊函数扩展实现的一部分 (ISO/IEC 29124:2010)。在后一种情况下,您的实施可能需要您在包含 <cmath>
header 之前 #define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
才能使该功能可用。
请注意,与 Python 不同,C++ 不支持 built-in 大整数,因此首先使用浮点运算可能是一个不错的选择。
免责声明:如果使用 C++17,请使用 @ComicSansMS 中描述的 beta
函数,否则您可以使用 tgamma
甚至 lgamma
函数,如果使用C++11
使用lgamma
:
double comb_l(double n, double k) {
return std::exp(std::lgamma(n + 1)- std::lgamma(k + 1) - std::lgamma(n - k + 1));
}
使用tgamma
:
double comb_t(double n, double k) {
return std::tgamma(n + 1) / std::tgamma(k + 1) / std::tgamma(n - k + 1));
}