目录

  • 快速幂的作用
  • 快速幂的实现
    • 思路
    • 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. MyBatis批量增删改的另外一种思路(推荐)
  2. LeetCode Third Maximum Number
  3. 【算法与数据结构专场】BitMap算法基本操作代码实现
  4. java中的console是干什么的_[Java教程]javascript中,你真的会用console吗?
  5. 去除IE10自带的清除按钮
  6. 请对比html与css的异同,css2与css3的区别是什么?
  7. 【ZZ】Python安装模块出错(ImportError: No module named s...
  8. GPU是如何工作的?
  9. linux contos7防火墙加端口,Linux:centos7防火墙开放端口
  10. Leetcode每日一题:46.permutations(全排列)
  11. 2021年青海高考一分一段成绩查询,最新2021年青海高考一分一段公布
  12. python mvc框架django搭建项目_Django笔记1:基础:创建虚拟主机和新项目
  13. 数据挖掘笔记——概念学习
  14. 用计算机如何修改wif密码,电脑怎么修改无线网(WIFI)密码?
  15. 理性分析PDD,技术BUG?市场误操?还是……
  16. 2011端午节搞笑短信大全
  17. 2021年度学习总结
  18. Anton and Fairy Tale
  19. 事关微信支付,别成为背锅侠!
  20. 缩略图查看器(Thumbs.DB Viewer) 1.2.0.80

热门文章

  1. c#工业自动化通信开发库,工业自动软件必备的基本程序
  2. 无处不在的线性分解,转自林达华
  3. 前端Uncaught (in promise) 的解决方法及原因
  4. 华为回应与陈春花教授相关传言;iPhone14Pro系列将独占A16芯片;Bug太多,Python 3.11推迟发布|极客头条...
  5. HHU云计算期末复习(下)Hadoop、虚拟化技术、openstack
  6. Windows 7日志的CAPI2错误 4107
  7. nuxt项目中使用store
  8. JavaScript 设计模式学习第二十五篇-中介者模式
  9. Oracle 最值的优化 -- 利用分析函数改写
  10. 微信小程序内使用echart实现中国地图,点击省跳转省地图,再点击市跳转到市区详情