我们知道,可以 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
那么上述求解过程就显然了