- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图解决一个涉及大阶乘模质数的问题,并在另一个人的解决方案中发现了以下算法:
long long factMod (long long n, long long p)
{
long long ans = 1;
while (n > 1)
{
long long cur = 1;
for (long long i = 1; i < p; i++)
{
cur = (cur * i) % p;
}
ans = (ans * modPow(cur, n/p, p)) % p;
for (long long i = 1; i <= n % p; i++)
{
ans = (ans * i) % p;
}
n /= p;
}
return (ans % p);
}
long long nChooseK(long long n, long long k, long long p)
{
int num_degree = get_degree(n, p) - get_degree(n - k, p);
int den_degree = get_degree(k, p);
if (num_degree > den_degree) { return 0; }
long long nFact = factMod(n, p);
long long kFact = factMod(k, p);
long long nMinusKFact = factMod(n-k, p);
long long ans = (((nFact * modPow(kFact, p - 2, p)) % p) * modPow(nMinusKFact, p - 2, p))%p;
return ans;
}
我知道数论的基础知识,但似乎无法弄清楚它是如何工作的。
nChooseK 函数似乎使用组合 [n!/(n-k)!k!] 的定义以及使用费马小定理计算的模逆来代替除法。但是,根据其中一个答案,factMod 函数实际上并不计算阶乘。如果是这种情况,nChooseK 函数是如何工作的?
最佳答案
是的,n! ≡ 0 mod p 当且仅当 n ≥ p,但 factMod
不计算 n! mod p – 它正在计算 n!/pk mod p,其中 k 是 n! 素因式分解中 p 的指数,
也许
用于计算二项式系数.循环的第 i 次迭代(从 0 开始计数)计算那些因子 1…n 的贡献,这些因子的质因式分解包括 pi。语句 n/= p;
产生关于 p 的倍数的子问题。
函数 get_degree(n, p)
可能会返回 n! 素因式分解中 p 的指数。如果get_degree(n, p) == get_degree(k, p) + get_degree(n - k, p)
,那么p在分子和分母中的因式刚好抵消,我们可以用factMod
来考虑其他因素。否则,组合的数量可以被 p 整除,所以我们返回 0。
从 (p-1) 开始! ≡ -1 mod p by Wilson's theorem ,第一个内循环是多余的。
关于algorithm - 解释以下算法以求 nCr 模 P,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320115/
我怀疑作者是如何得出公式背后的直觉来计算这个问题中的 (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
我是一名优秀的程序员,十分优秀!