目录

  • 快速幂的作用
  • 快速幂的实现
    • 思路
    • Code
  • 例题

快速幂的作用

当我们做一些高次幂的计算时,就不能直接进行暴力的计算。例如:需要计算2n2^n2n并且n≤1018n\le 10^{18}n≤1018。这时候如果我们直接进行暴力的计算,时间复杂度为O(n)O(n)O(n),那么肯定会超时,这时候我们就需要一些更优美的算法来帮我们解决这个问题。

快速幂的实现

思路

首先我们要明确一点,对于一个mnm^nmn,当nnn为偶数时,mn=(m2)n2m^n=(m^2)^\frac n2mn=(m2)2n​。
如果知道了这一点我们的问题就迎刃而解了。


求解2k2^k2k。
定义:nownownow为当前的底数,fff为临时存放处。
当kkk为偶数时,now×=now,k/=2now\times=now,k/ =2now×=now,k/=2
当kkk为奇数时,k−−,f∗=nowk--,f*=nowk−−,f∗=now,然后再以kkk为偶数的情况进行计算。
相信大家看了这简单的算法应该都能理解吧。

Code

int quickpow(int n,int k) {long long now=n,f=1;while(k>1) {if(k%2==1) k--,f*=now;if(k) now*=now,k/=2;}return now*f;
}

例题


Input

Output


这一题我们可以明显的看出规律,答案其实就是2n−12^{n-1}2n−1。
快速幂求解即可,时间复杂度O(log(n))O(log(n))O(log(n))

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#define p 1000000007
using namespace std;
long long ans=2,n;
void qpow(long long k) {long long f=1;while(k>1) {if(k%2!=0) f=(ans*f)%p,k--;if(k) ans=(ans*ans)%p,k/=2;}ans=(ans*f)%p;
}
int main() {scanf("%lld",&n);qpow(n-1);printf("%lld",ans);
}

快速幂详解(超详细!!!)相关推荐

  1. 快速幂详解(通俗易懂!)

    本文为博主原创文章,未经允许不得转载.如有问题,欢迎指正! 快速幂详解 问题背景: 粗暴求解: 如何解决超时问题: 如何解决乘法溢出的问题: AC完整代码 总结: (一)一些说明 (二)特殊情况&am ...

  2. Java 泛型详解(超详细的java泛型方法解析)

    Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...

  3. 第M题 快速幂详解!: 给出3个正整数A B C,求A^B Mod C。

    给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^9) ...

  4. 斜率优化详解(超详细, 有图有代码有注释)

    文章目录 斜率优化引入 从例题开始 斜率优化Part 1: 推为斜率式 斜率优化Part 2: 合法点集的斜率单调性 Part 3: 找到最优决策点 Part 4: 斜率优化大流程 Part 5: 斜 ...

  5. 数学--矩阵快速幂详解

    引导: 我们之前都学快速幂: 矩阵也是可以相乘,方阵可以自乘,即乘幂运算. 作用: 将线性递推,优化log2nlog_{2}nlog2​n 模板: 定义矩阵的阶 const int len = 15; ...

  6. mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...

    超详细mysql left join,right join,inner join用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a200 ...

  7. log4j 配置详解(超详细)

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  8. 【bind()函数】JavaScript手写bind()及详解-超详细~~~

    这两天学习了手写call.apply.bind,手写bind思考了很久才实现了MDN的示例的结果,所以记录下来~ 因为是第一篇文章,所以可能存在一些错误,希望各位大佬批评指正,不吝赐教. 也欢迎不懂的 ...

  9. (详解)矩阵快速幂详解与常见转移矩阵的构造

    目录 转移矩阵求解套路 常见转移矩阵1-斐波那契矩阵 承接套路 常见转移矩阵2-类斐波那契数列 常见转移矩阵3-幂常数 前缀和 具体DP问题 ----------------------------- ...

最新文章

  1. Python程序员的“避坑”指南
  2. 【已解决】可以访问Tomcat下webapp中的文件目录(间接实现下载功能)
  3. 下一代对话系统中的关键技术(上篇)
  4. java编程笔记18 文件压缩与解压缩
  5. 数位dp总结 之 从入门到模板(stO)
  6. MongoDB基础(3.6安装及多实例)
  7. java jdbc 连接mysql数据库 实现增删改查
  8. 【算法学习】双调欧几里得旅行商问题(动态规划)
  9. 基于MySQL和JavaFX的学生管理系统
  10. JavaScript命名冲突不可避免?
  11. c语言知识点总完整版pdf,C语言知识点总结 重点版.pdf
  12. 电商ERP软件、订单管理系统、库存管理系统
  13. 非香农类信息不等式_ICLR 2020 | 北大图灵班满分论文:基于计算约束下有用信息的信息论...
  14. 基于JavaWeb网上商城(以卖书为主)
  15. 【图灵奖得主】Alfred V. Aho 哥伦比亚大学
  16. android data com.qzone,我手机是安卓系统的,Qzone里的FileCache文件夹中的文件是什么东西?...
  17. AcWing 292 炮兵阵地
  18. qcon2016_从QCon San Francisco 2016中学到的重点知识和教训
  19. Java计算10000天出生纪念日
  20. x64dbg 自带脚本系统

热门文章

  1. python中try怎么用_python中的try的用法
  2. 图像内容修改—快速去水印
  3. Python数据三维可视化-VTK
  4. 【数仓】数据仓库—数据集成
  5. asic面试题目 英伟达_NVIDIA校招面试经历
  6. 57、yolov5+rk3399pro/yolov7+rk3588 支持batchsize=3仿真测试和实体开发板上测试
  7. EOJ1600公路巡逻
  8. arcgis 点查询
  9. linux音乐服务器mpd,ArchLinux 音乐播放客户端ncmpcpp和服务端mpd的配置
  10. 英国小企业家网上促销年赚百万(图)