求大 n 和 k 模 m 的二项式系数

2023-11-22

我想计算 nCk mod m 具有以下约束:

n

k

m=10^9+7

我读过这篇文章:

但这里 m 的值为 1009。因此,使用卢卡斯定理,我们只需要计算 1009*1009 个不同的 aCb 值,其中 a,b

如何在上述限制下做到这一点。 我无法在给定的约束下创建 O(m*k) 空间复杂度的数组。

Help!


二项式系数(n, k)由以下公式计算:

(n, k) = n! / k! / (n - k)!

为了使这项工作适用于大量n and k modulo m观察到:

  1. 一个数模的阶乘m可以一步步计算, 每一步都取得结果% m。然而,当 n 达到 10^18 时,这会太慢。所以有更快的方法其中复杂性受模数限制,您可以使用其中的一些。

  2. 该部门(a / b) mod m等于(a * b^-1) mod m, where b^-1b modulo m(那是,(b * b^-1 = 1) mod m).

这意味着:

(n, k) mod m = (n! * (k!)^-1 * ((n - k)!)^-1) mod m

可以使用以下方法有效地找到数的倒数扩展欧几里得算法。假设您已经解决了阶乘计算,算法的其余部分很简单,只需注意乘法时的整数溢出即可。这是适用于以下情况的参考代码n=10^9。为了处理更大的数字,阶乘计算应该替换为更有效的算法,并且代码应该稍微调整以避免整数溢出,但主要思想保持不变:

#define MOD 1000000007

// Extended Euclidean algorithm
int xGCD(int a, int b, int &x, int &y) {
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }

    int x1, y1, gcd = xGCD(b, a % b, x1, y1);
    x = y1;
    y = x1 - (long long)(a / b) * y1;
    return gcd;
}

// factorial of n modulo MOD
int modfact(int n) {
    int result = 1;
    while (n > 1) {
        result = (long long)result * n % MOD;
        n -= 1;
    }
    return result;
}

// multiply a and b modulo MOD
int modmult(int a, int b) {
    return (long long)a * b % MOD;
}

// inverse of a modulo MOD
int inverse(int a) {
    int x, y;
    xGCD(a, MOD, x, y);
    return x;
}

// binomial coefficient nCk modulo MOD
int bc(int n, int k)
{
    return modmult(modmult(modfact(n), inverse(modfact(k))), inverse(modfact(n - k)));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

求大 n 和 k 模 m 的二项式系数 的相关文章

  • 机器人探索算法

    我正在尝试为机器人设计一种算法 试图找到位于未知位置的旗帜 该旗帜位于一个包含障碍物的世界中 机器人的任务是夺取旗帜并将其带到他的基地 代表他的起始位置 机器人在每一步只能看到有限的邻域 他事先不知道世界是什么样子 但他有无限的内存来存储已
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 为什么 matplotlib 的缺口箱线图会自行折叠?

    我尝试使用 matplotlib 制作缺口箱线图 但发现缺口箱往往会过度延伸 然后自行折叠 当我制作常规箱线图时 不会发生这种情况 这可以通过以下代码和生成的结果图看出 import matplotlib pyplot as plt dat
  • 为什么我需要先更改绑定源位置才能保存更改

    我有一个小型演示 WinForms 应用程序 其中一份表格是我的 添加新人 表格 我使用了详细信息视图而不是DataGridView来自我的数据源 当我输入数据并单击导航器上的保存按钮时 更改为零 但是我输入了MovePrevious an
  • Ruby on Rails 中的 send_data 与电子表格插件结合使用时遇到困难

    我在控制器中有一个函数 它接受一些规范并生成有关它们的报告 这个函数 user report 在视图中被调用 controller gt reports action gt user report print state gt 打印 gt
  • 替换多个换行符、制表符和空格[重复]

    这个问题在这里已经有答案了 我想用一个换行符替换多个换行符 用一个空格替换多个空格 I tried preg replace n n n text 并失败了 我还在 text 上完成这项工作以进行格式化 text wordwrap text
  • Gradle + Buildship - 在 JAR 和项目之间切换依赖关系

    我在按照我想要的方式配置 Buildship for Eclipse 时遇到一些问题 目前 我始终在 Eclipse 中打开超过 50 个项目 但我想改为仅在 Eclipse 中积极处理的项目 而其他项目将使用 Maven 存储库来解决其依
  • Nodejs POST 请求多部分/表单数据

    我正在尝试通过 POST 请求上传照片request module 根据自述文件我应该能够做到这一点 var r request post http posttestserver com post php requestCallback v
  • 使用 COM 互操作将 BSTR 从 C++ 编组到 C#

    我有一个用 C 编写的进程外 COM 服务器 由一些 C 客户端代码调用 服务器接口之一上的方法向客户端返回一个大的 BSTR 我怀疑这会导致内存泄漏 该代码有效 但我正在寻求有关编组 BSTR 的帮助 稍微简化一下 服务器方法的 IDL
  • htaccess - 重定向到子文件夹而不更改浏览器 URL

    我有一个域 其中包含具有 Web 应用程序结构的子文件夹 我添加了一个 htaccess在我的根域上指向我的子文件夹 Web 应用程序上的公共文件夹 它工作正常 但是当我输入时www example com浏览器 URL 更改为www ex
  • 无法更新 Xcode 4.2。错误:请查阅 var/log/install.log 了解更多详细信息?

    UPDATE 既然这个问题得到了一些看法 我想我最好强调这样一个事实 我解决了问题简单地通过从 Mac App Store 重新下载 Xcode 重新安装后 它甚至给了我一个方便的选项来删除以前的版本并将其替换为新版本 希望这可以帮助遇到同
  • 从 std::thread 获取返回码? [复制]

    这个问题在这里已经有答案了 可能的重复 C std thread 的简单返回值 有没有办法从 std thread 获取返回码 我有一个返回整数的函数 我希望能够在线程执行完毕时从该函数获取返回代码 不 不是这样的std thread is
  • 有界度生成树中的 np 完整性

    我理解为什么有界度生成树被认为是具有 1 或 2 度的 NP 完全 它是哈密顿路径问题的一个实例 但我不明白为什么这适用于度 gt 2 如果有人可以解释为什么这是度 gt 2 的 NP 完全问题 这将是最有帮助的 好吧 我认为你可以从有界
  • R Shiny:在服务器端使用 Actionbutton 的 Onclick 选项

    我想制作一个闪亮的应用程序 用户可以在其中按下操作按钮 然后触发服务器端的一些代码 在 www 文件夹中创建一个文件 然后打开 下载该文件 假设该文件是 test txt 在我的例子中 它将是各种 R Excel 和 exe 文件 这些文件
  • Visual Studio 2010“按任意键继续...”不显示[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 当我的应用程序完成执行时 按任意键继续 字样不会显示在控制台中 我知道这个提示应该在 启
  • 聚合匹配的项目在 mongodb 中不起作用

    我正在尝试根据某些匹配条件获取数据 首先我尝试过这个 这里的ending date是完整的日期格式 Offer aggregate match carer id req params carer id status 3 group id y
  • JavaScript 按钮重定向

    试图让我的按钮充当链接 尝试过 a 标签 如果您在新选项卡中打开它会起作用 但如果您单击它则不起作用 然后尝试了这段代码 但什么也没有 建议 a
  • Angular-cli 资产优化中的“JavaScript 堆内存不足”

    我正在 Angular cli 项目中创建传单地图 地图图块本地存储在 assets 文件夹中 因为它是栅格地图 问题是 当我有很多地图缩放级别时 我有超过 28 万张图像 大小大约为 1 1 GB 而且它会变得更大 当我使用ng serv
  • 如何在 Java 中查找给定服务器的 DNS MX 记录?

    有人知道如何使用标准库在java中获取MX地址 例如来自gmail com 吗 或者我需要下载外部的吗 我正在使用 netbeans 如果它有帮助的话 如果它为此提供了一些东西 我也在java中为此寻找标准库 不成功 然后我用过dnsjav
  • 获取浏览器中的快捷键组合

    我想制作一个页面 其中某些输入和链接附加有访问键 并且我想通知用户需要按什么组合键来激活输入或链接 有没有办法通过JavaScript自动获取浏览器的accesskey组合键 或者我是否需要检测它是哪个浏览器 然后只使用一个存储浏览器使用的
  • 如何在 vim 中用 & 符号替换?

    正如标题所说 我想用与号 替换 制表符 I use s t g 当然这是行不通的 我在 mac os x 上使用 vim 如果这有影响的话 谢谢 您确定问题出在 符号上吗 我收到了更多关于该标签的投诉 别忘了逃避它 s t g
  • 求大 n 和 k 模 m 的二项式系数

    我想计算 nCk mod m 具有以下约束 n k m 10 9 7 我读过这篇文章 但这里 m 的值为 1009 因此 使用卢卡斯定理 我们只需要计算 1009 1009 个不同的 aCb 值 其中 a b 如何在上述限制下做到这一点 我