当前位置: 首页 > news >正文

大数求余

大数求余问题: 在仅使用 int32 类型存储的前提下, 计算 \(x^a\ \text{mod}\ p\) (即 \(x^a\ \%\ p\)).

基本的运算规则: \((xy)\ \%\ p = [(x \ \% \ p)(y \ \% \ p)] \ \% \ p\)

循环求余

\(x < p\) 时,

\[x^a \ \% \ p = [(x^{a-1} \ \% \ p)(x \ \% \ p)] \ \% \ p = [(x^{a-1} \ \% \ p)x]\ \% \ p \]

利用此公式, 可以通过循环操作依次求 \(x^1, x^2,\cdots, x^{a-1}, x^a\)\(p\) 的余数

# 求 (x^a) % p -- 循环求余法
def remainder(x, a, p):rem = 1for _ in range(a):rem = (rem * x) % preturn rem

时间复杂度为 \(O(a)\)

快速幂

\[x^a \ \% \ p = (x^2)^{a/2} \ \% \ p = (x^2 \ \% \ p)^{a/2} \ \% \ p \]

具体要看 \(a\) 的奇偶性:

\[x^a \ \% \ p = \left\{\begin{matrix} (x^2 \ \% \ p)^{a//2} \ \% \ p & , a 为偶数 \\ [x(x^2\ \%\ p)^{a//2}] \ \% \ p &, a 为奇数 \end{matrix}\right. \]

时间复杂度为 \(\log a\) .

十进制正整数 \(a\) 的二进制形式为 \(b_m\cdots b_2b_1b_0\) , 则 \(x^a = x^{2^{m}b_m} \times \cdots \times x^{2^1 b_1}\times x^{2^{0}b_0}\). 计算 \(x^1, x^2, x^4, \cdots , x^{2^m}\) 的值:

# 求 (x^a) % p -- 快速幂求余
def remainder(x, a, p):rem = 1while a > 0:if a & 1: rem = (rem * x) % px = (x * x) % pa >>= 1return rem
http://www.zskr.cn/news/16472.html

相关文章:

  • QBXT2025S刷题 Day5题
  • Linux 中 m、mm、mmm 函数和 make 的区别 - 详解
  • 详细介绍:学习STC51单片机27(芯片为STC89C52RCRC)
  • ZR 2025 十一集训 Day 6
  • Linux或者Windows下PHP版本查看便捷的方法总结
  • 线性表的顺序存储和链式存储
  • US$34.2 KEYDIY KD B27-3 Universal Flip Remote 3 Buttons for Audi Type 5pcs/lot
  • 点乘与叉乘的由来:从四元数到公理自洽的启示
  • 面试题——计算机网络:HTTP和HTTPS的区别? - 教程
  • C# Avalonia 16- Animation- RotateButton
  • 详细介绍:python第31天打卡
  • 如何采用插件和子主题添加WordPress自定义CSS(附:常见错误)
  • 02020502 EF Core高级02-IQuerable会延迟执行、分部和动态构建IQuerable、IQuerable的复用
  • 在 PyCharm 中,环境:bert_env , 执行 import wandb 报错。但是,在CMD窗口,环境:bert_env , 执行 import wandb 正常。
  • Linux_T(Sticky Bit)粘滞位详解 - 详解
  • Valley靶机渗透实战:从凭证复用到Python库劫持
  • 深入解析:IP Search Performance Tests dat/db/xdb/mmdb 结构性能差异对比
  • 10.05模拟赛反思
  • 如何快速搭建spring-boot工程 - murphy
  • 做题记录 #1
  • 深度学习优化器算法巧思速览
  • 在Windows下使用lucky实现TLS/SSL证书自动化
  • CF700E
  • 价值弥漫:“AI元人文”的场域革命与共生之路
  • k8s之pod概念
  • 鸿蒙版Taro 搭建开发环境 - 教程
  • CF 1055 Div.1+Div.2
  • 2026 NOI 做题记录(五)
  • “齐俊杰投资智能体”更新完了9月份的资料
  • docker 离线安装