当前位置: 首页 > 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.jsqmd.com/news/9135/

相关文章:

  • vulkan游戏引擎renderer_backend实现 - 详解
  • 基于MPPT算法的光伏并网发电系统simulink建模与仿真
  • 实用指南:【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)
  • 软件版悟空博弈+WAUC构筑元人文演化之路研究报告——声明Ai研究
  • QBXT2025S刷题 Day5题
  • Linux 中 m、mm、mmm 函数和 make 的区别 - 详解
  • 详细介绍:学习STC51单片机27(芯片为STC89C52RCRC)
  • [KaibaMath1001] 关于∀ε0,|a-b|ε = a=b的证明
  • 基于Web的分布式图集管理系统架构设计与实践 - 教程
  • 完整教程:Deepseek/cherry studio中的Latex公式复制到word中
  • AirSim 安装过程记录 - zzh
  • 国庆 Day2 强基物理
  • ZR 2025 十一集训 Day 6
  • LARAVEL安装报错:Illuminate\Database\QueryException could not find driver (Connection: sqlite, SQL:
  • unix/linux source 命令,其发展历程详细时间线、由来、历史背景 - 指南
  • 基于AXI模块的视频流传输(硬件连接篇)
  • 四、函数调用具备单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
  • [GDOUCTF 2023]泄露的伪装
  • 仿射密码
  • AtCoder Regular Contest 207 (Div.1) 游记
  • kubeadm续约k8s 1.23.14所有证书
  • Linux或者Windows下PHP版本查看便捷的方法总结
  • 详细介绍:云原生时代 Kafka 深度实践:05性能调优与场景实战
  • 深入解析:AI破局:饿了么如何搅动即时零售江湖
  • 从零开始学Flink:数据输出的终极指南
  • 数据编织平台实现AI代理自助数据访问
  • [题解]P12008 【MX-X10-T4】[LSOT-4] Fragment of Memories
  • 自然语言处理(NLP)的系统学习路径规划 - 实践
  • 2.Android Compose 基础系列:在 Kotlin 中创建和使用变量
  • 线性表的顺序存储和链式存储