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

快速幂 c++

一般大家写x^a都是

int ans = 1;
for (int i = 1; i <= a; i ++)ans *= x;

时间复杂度O(n)

但是这对于我们还不够,我们要O(logn)


首先我们得知道一个数学知识

x^{a^{b}} = x^{a*b}

那么求 x^a 就有以下递归式

a 能2整除   x^a = x^{(a/2)^{2}} = x^{a/2} * x^{a/2}

a 不能2整除  x^a = x^{(a/2)^{2}} * x = x^{a/2} * x^{a/2} * x (这里a/2是整除)

所以每次都调用 a/2 不就是O(logn)

最后补充一个东西

x^a mod b = (x^{i} mod b * x^{j} mod b) mod b  (i + j = a)

代码:

#include <iostream>
using namespace std;
typedef long long LL;
LL a, b, m;
//m是取模的数
LL q_pow(LL a, LL b, LL m) {if(b == 0)return 1;LL tmp = q_pow(a, b >> 1, m) % m;return (b & 1 ? a : 1) * tmp % m * tmp % m;
//b & 1 和 b % 2 == 1 是等价的
}
int main() {cin >> a >> b >> m;cout << q_pow(a, b, m);return 0;
} 

http://www.lryc.cn/news/165814.html

相关文章:

  • 分享一个基于微信小程序的医院口腔助手小程序 牙科诊所预约小程序 源码 lw 调试
  • Si3262 一款低功耗刷卡+触摸+mcu 三合一SOC芯片
  • [H5动画制作系列] 奔跑的豹子的四种Demo演化
  • 如何实现让一个函数能返回多个值的效果
  • End-to-end 3D Human Pose Estimation with Transformer
  • 状态管理Pinia
  • maven运行报错解决
  • 在线会计软件推荐:高效实用的选择解析
  • vue监听Enter键
  • ADS中带通滤波器模型参数含义学习笔记
  • 【Blender】Blender入门学习
  • Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)
  • Python web 框架web.py「简约美」
  • Bootstrap 重新数据查询时页码为当前页问题
  • scratch舞蹈比赛 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析
  • windows下安装redis扩展库
  • 大数据平台数据安全具体措施有哪些?有推荐的吗?
  • 基于SSM的健康综合咨询问诊平台设计与实现
  • 每日一题 2596. 检查骑士巡视方案
  • 第二章 进程与线程 三、进程控制
  • 【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解
  • K8S:kubectl陈述式、声明式资源管理及金丝雀部署
  • docker容器日志管理
  • Oracel ORA-22992 错误的解决方法
  • CrossOver 23 正式发布:可在 Mac 上运行部分 DX12 游戏
  • 一、Mediasoup源码介绍
  • ⑧ 嵌套路由配置
  • 【ppt技巧】将幻灯片里的图片背景设置为透明
  • rrweb入门
  • OSCP系列靶场-Esay-Vegeta1保姆级