两个数n m 求从n里面选m个的选法 , 模数固定取1e9+7c++
时间: 2024-12-22 08:28:10 浏览: 3
在C++中,如果你想要计算从n个元素中选择m个元素的组合数,并将结果对1e9 + 7(即10^9 + 7)取模,可以使用二项式定理或称为组合公式:
C(n, m) = n! / [m!(n - m)!]
其中,`!`表示阶乘运算,`n!`是n的所有正整数乘积,而`m!`和`(n - m)!`则是m和n-m的阶乘。
由于直接计算大数的阶乘可能会导致数值溢出,因此通常我们会使用长整型或特定库(如`<cmath>`中的`factorial`函数),并且对中间结果以及最终结果都进行取模操作,以保证结果的有效性和模数限制。
以下是一个简单的示例代码片段:
```cpp
#include <iostream>
using namespace std;
// 计算阶乘并取模
long long factorial(int n, int mod = 1e9 + 7) {
if (n == 0 || n == 1)
return 1;
else
return (n * factorial(n - 1, mod)) % mod;
}
// 计算组合数 C(n, m)
long long combination(int n, int m, int mod = 1e9 + 7) {
long long c = factorial(n, mod) / (factorial(m, mod) * factorial(n - m, mod));
return c % mod; // 取模防止溢出
}
int main() {
int n, m;
cout << "Enter the values of n and m: ";
cin >> n >> m;
long long result = combination(n, m);
cout << "The number of ways to choose " << m << " from " << n << " is: " << result << " (mod 1e9 + 7)" << endl;
return 0;
}
```
记得输入n和m的值,并运行此程序。这会给出满足条件的组合数的值。
阅读全文