c++ - 我们如何计算 N choose K modules a prime number 而不会溢出?

标签 c++ c algorithm math modulo

我们如何在不调用溢出的情况下在 C 或 C++ 中计算 ( N choose K)% M?

对于 N (4<=N<=1000)K (1<=K<=N)M = 1000003 的特殊情况.

最佳答案

要计算 (n choose k) % M,可以分别计算分母 (n!) 模 M 和分母 (k!*(n - k)!) 模 M,然后将分母乘以分母的模乘法逆(在 M 中)。由于M是素数,可以利用费马小定理计算乘法逆元。

在以下链接(问题 SuperSum)上有一个很好的解释和示例代码:

http://www.topcoder.com/wiki/display/tc/SRM+467

关于c++ - 我们如何计算 N choose K modules a prime number 而不会溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638988/

相关文章:

scanf 后 CLion 不会在控制台中打印

c - 如何编写没有 'main'的C程序?

performance - 任何算法的时间复杂度是否有可能随着输入大小的增加而降低,例如

c++ - 什么是快速插入+删除和部分反转的好数据结构?

c++ - 第二次调用 mysql_fetch_row 时出现段错误

c++ - Armadillo cpp : access slice of a 3D field

c - C 中的段错误编译器错误

algorithm - 是否可以实现O(1)空间复杂度的快速排序?

python - 关于 Python 内置的 sort() 方法

c++ - 删除 TXMLDocument 对象 Embarcadero