如果n可以大到1M并且r大约为100,那么计算nPr的最有效方法是什么。
答案 0 :(得分:1)
P(n,r) = n! / (n-r)!
我们很容易删除(n-r)!从提名者和分母。现在公式是
P(n,r) = n*(n-1)*..(n-r+1)
旧答案,不是关于这个问题,关于组合:
C(n,k) = n! / (k! * (n-k)!)
我们很容易删除(n-k)!从提名者和分母。现在公式是
C(n,k) = n*(n-1)*..(n-k+1) / k! = n*(n-1)*..(n-k+1) / (1 * 2 * ...*k)
如果我们先计算完整的提名者,那就非常大了。
但是我们可以交替步骤 - 取n,然后除以第一项分母(1),乘以(n-1) - 除以第二分母项(2),依此类推。
C(n,k) = n / 1 * (n-1) / 2 * (n-2) / 3 .. * (n-k+1) / k
请注意,部分提名产品总是可以被相同长度的部分分母产品整除。
使用这种方法,中间结果不是很大,大数(长算术)的计算会更快。