我们知道,可以O(m)地求得(nm),做法就是
//return C(n,m)
int choose(int n, int m){
int res = 1;
for (int i = 1; i <= m; ++i) {
res *= n - i;
res /= i;
}
return res;
}
那么为什么这么做一定正确呢?注意到如下事实:
- 连续k个数中一定有且仅有一个可以整除
k
那么上述求解过程就显然了
我们知道,可以O(m)地求得(nm),做法就是
//return C(n,m)
int choose(int n, int m){
int res = 1;
for (int i = 1; i <= m; ++i) {
res *= n - i;
res /= i;
}
return res;
}
那么为什么这么做一定正确呢?注意到如下事实:
那么上述求解过程就显然了