快速幂 FastPow

一、概念

顾名思义即快速计算幂的方法。

二、原理

每个数均有二进制的表达方式,例如 十进制52647 的 二进制 为 1100 1101 1010 0111
那么则有:
2 15 + 2 14 + 2 11 + 2 10 + 2 8 + 2 7 + 2 5 + 2 2 + 2 1 + 2 0 = 52647 2^{15}+2^{14}+2^{11}+2^{10}+2^{8}+2^{7}+2^{5}+2^{2}+2^{1}+2^{0}=52647 215+214+211+210+28+27+25+22+21+20=52647

这看似与快速幂没有任何关系,但是其实这就是关键所在。

例如 计算 2^10
最简单最初想到的一定是 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 2×2×2×2×2×2×2×2×2×2 2×2×2×2×2×2×2×2×2×2 总共需要计算10次
那么如果变成 ( 2 × 2 × 2 × 2 × 2 ) × ( 2 × 2 × 2 × 2 × 2 ) (2×2×2×2×2)×(2×2×2×2×2) (2×2×2×2×2)×(2×2×2×2×2)
即 32 × 32 32×32 32×32
则总共需要计算2次

一次是计算 2 × 2 × 2 × 2 × 2 2×2×2×2×2 2×2×2×2×2
另一次是计算 32 × 32 32×32 32×32

相比之下已经极大地降低了时间复杂度。这里其实就是运用了倍增思想

倍增法,意为成倍增长。在进行递推时,如果状态空间很大,通常的线性递推无法满足时间与空间复杂度的要求,那么我们可以通过成倍(通常以2作为基底)增长的方式,它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。

为什么通常要用2为基底各位Coders应该都知道吧

快速幂 FastPow相关推荐

  1. 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)...

    题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...

  2. BZOJ 2004 公交线路(状压DP+矩阵快速幂)

    注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...

  3. 19.1 快速幂的定义和模板

    文章目录 模运算的加减乘除 快速幂的定义 快速幂的例题 模运算的加减乘除 模运算是大数运算中的常用操作.如果一个数太大,无法直接输出,或者不需要直接输出,可以把它取模后,缩小数值再输出.取模也是哈希的 ...

  4. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  5. 牛客 华华给月月出题 (积性函数+欧拉筛+快速幂)

    题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: ⊕符号表示异或和,详见样例解释. 虽然月月写了个程序暴力的算出了答案,但是为了确保自己的答案没有错,希 ...

  6. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

  7. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  8. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  9. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取 ...

最新文章

  1. 独家 | 建立软件的经济学分析框架,浅议开源软件的经济学特性(附图解)
  2. conda 修改环境名称
  3. VC++ ATL 学习总结
  4. CTF基础理论知识02
  5. 【题解】Atcoder ARC#90 F-Number of Digits
  6. Shell编程入门(第二版)(中)
  7. 【插件介绍】Lombok
  8. MySQL 8.0.26 图形化安装教程 (windows 64位)
  9. java父类静态 子类调用_在java 中 父类定义的静态方法 子类 调用时候 如何 知道 是哪个子类调用的...
  10. Git教程之一个团队如何在github上协作开发
  11. 在Fragment中使用ListView+ViewPage
  12. docker容器无法使用top命令
  13. 软考——系统架构设计师工作日志
  14. java设置excel标题栏_Java EasyExcel写入Excel中复杂头(head)表中的标题的方法及示例代码...
  15. TOM企业邮箱登录入口在哪里?分享企业邮箱登录入口手机网页版
  16. 教你如何正确反编译apk
  17. Maxwell-学习笔记
  18. SE (Squeeze Excitation)模块
  19. docker启动mysql闪退问题
  20. 随着日益增多的新技术,如何正确的提升自己?

热门文章

  1. 用户没有权限安装软件是什么原因?
  2. Unix/Linux编程:CPU亲和力
  3. 妻子的容颜,与丈夫有关
  4. 0326 预习笔记和直播笔记
  5. USB3.0芯片FT601Q简介及FPGA实现
  6. 上海酒店分布api,返回上海市政宾馆信息
  7. 国泰君安实习笔试面试情况
  8. 解决 Duplicate keys detected: ‘483‘. This may cause an update error. 报错问题
  9. java swing 播放音乐_java swing 音乐播放器-乐乐音乐
  10. 我用python画了个福