- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要计算 nCr(n,m) % k
对于大 n
( n <= 10^7)
高效。
这是我的尝试:
int choose(int n, int m, int k) {
if (n==m || m==0)
return 1 % k;
return (choose(n-1, m-1, k) + choose(n-1, m , k)) % k;
}
它计算一些组合 mod k:nCr(n,m) % k
通过利用 pascals identity .
这对于大 n
来说效率太低了(尝试 choose(100, 12, 223092870)
),我不确定这是否可以通过 memoization 加速或者是否需要一些完全不同的数论方法。
我需要立即对大量数据高效执行,这就是为什么我不确定内存是否是解决方案的原因。
备注:k
不一定是素数!
最佳答案
由于 nPr 有一个明确的公式 nPr(n, m) = n!/((n-m)!)
,您绝对应该尝试使用它。我的建议是:
nPr(n , m) = n*(n-1)*...*(n-m+2)*(n-m+1)
)最后,您应该在计算 nPr(n, m) 之后 计算模,以避免冗余的模运算。
如果有帮助,您可以尝试制定一个 loop invariant ,这几乎是一个声明,对于 n
和 m
的所有有效值都应为真。
希望这对您有所帮助:)
我在写完答案后才意识到你说的是 nCr。对于 nCr,您可以在计算 nPr 之后添加另一个 while 循环,它只计算 m!
,将 nPr 除以 m!
,然后对答案取模。总而言之,这将产生一个 O(n) 算法,该算法非常可扩展。它使用的内存也非常少。
关于java - 有效计算大 n 的 nCr(n,m) mod k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44830285/
我怀疑作者是如何得出公式背后的直觉来计算这个问题中的 (m + n -2)C n-1 - https://www.geeksforgeeks.org/count-possible-paths-top-
我们数据库中的一些字符存储在 NCR 中(例如 台 (台))。 我需要能够在 alert 窗口中显示它们,所以我需要将值转换为 JavaScript 可以显示的内容。 我该怎么做? 最佳答案 一个简单
这是从 this similar question 复制的代码的解决方案。为什么comb(100, 50)后失败了?我相信它不应该超过long long的限制。如果确实如此,我不应该期待运行时错误而不
我尝试使用这种关系递归地找到 nCr 的值: nCr = (n - r + 1) / r * nC(r-1) int comb(int n, int r){ if(r == 0) return
我的递归函数在数组中查找 nCr 对象时遇到问题。 这仅在 r=2 时有效,这意味着仅当进入 1 层时。 当 r > 2 时,我的临时 'a' 数组似乎全乱了 // find nCr combinat
我正在尝试查找 nCr 值。没有错误,但我得到 1 作为所有输入的答案。请帮我找到解决方案。 #include int fact(int num) { int f=1,i; for(
我这里有两个函数一起计算 nCr: int factorial(int n) { int c; int result = 1; for (c = 1; c n - r) r = n - r;
我想从输入数组中返回所有可能组合的完整数组。我想生成 n 选 k 组合,其中 k=1 到 n。到目前为止,我一直非常不成功。 static void combinationUtil(String[]
下列递归方程的解是什么? T(n, 0) = 1, T(n, n) = 1, T(n, r) = T(n-1, r-1) + T(n-1, r) + 1 我在尝试找出对函数 nCr 的调用次数时得
方法一: C(n,r) = n!/(n-r)!r! 方法二: 在书Combinatorial Algorithms by wilf ,我发现了这个: C(n,r) 可以写成C(n-1,r) + C(n
请帮帮我。该程序应该递归地找出两个数字的组合。 nCr = n!/(r!(n-r)!)。当我在 GCC 上编译它时,收到此错误消息。 这是终端显示的内容: 输入两个数字:84段错误 (程序退出,代码:
我想使用 Java 解码从网站的 HTTP GET 请求中获得的以下字符串: Ö ' ü (我实际上必须将它们放入代码博客中,Stackoverflow 会自动解码它们,我希望我能尽快做到这一点;))
我在下面编写了代码来计算 n 个 testCount 值的 nCr。它似乎适合我的值(value)观,但 hacker earth 的测试用例失败,问题链接 http://www.hackereart
我正在尝试使用 dp 在 c 中计算 ncr(组合)。但它在 n=70 时失败了。谁能帮忙? unsigned long long ncr( int n , int r) { unsigned lon
您好,我在代码 sprint5 问题中实现 nCr MODm 时遇到了问题。问题链接是…… https://www.hackerrank.com/contests/codesprint5/challe
我试图解决一个涉及大阶乘模质数的问题,并在另一个人的解决方案中发现了以下算法: long long factMod (long long n, long long p) { long long
更新:组合数学和排序最终是我所需要的。下面的链接帮助很大: http://msdn.microsoft.com/en-us/library/aa289166(v=vs.71).aspx http://
我正在为本地语言制作一个提要阅读器应用程序。新闻网站提供带有这些字符的 RSS feed ഹലോ സ്റ്റാക്ക്ഓവ x0D7C; ഫ്ലോ 这实际上意味着ഹലോസ്റ്റാക്ക്ഓവ
这个问题已经有答案了: How do I decode HTML entities in Swift? (23 个回答) 已关闭 5 年前。 如何转换这种类型的十六进制字符串 🚗 表情
我为自己创建了一个关于如何执行 nCr % 1000000007 的函数。 我需要真正找到 (nCr + n2Cr2 + n3Cr3 +...) % 1000000007 我该如何从这里开始 (nCr
我是一名优秀的程序员,十分优秀!