我们在通常处理a^b问题中,一般来说第一时间想到的就是通过循环来暴力解决,但是这样的话时间复杂度就是o(n)。c++代码一秒的算力大概是1e7–1e8之间,倘若数据较大,题目就会超时导致TLE。因此,我们在这里介绍一下快速幂的算法。

题目引入AcWing a^b

求 a 的 b 次方对 p 取模的值。输入格式
三个整数 a,b,p ,在同一行用空格隔开。输出格式
输出一个整数,表示a^b mod p的值。数据范围
0≤a,b≤1e9
1≤p≤1e9

在这里,显然用暴力100%会导致超时,因此我们来看看快速幂。

快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。
让我们先来看一个简单的例子:
310=3*3*3*3*3*3*3*3*3*3
310=(3*3)(3*3)(3*3)(3*3)(3*3)
310=(3*3)5
310=(3*3)5
95=(94)*(91
95=(94)*(91
95=(65611)*(91)
以下以求a的b次方来介绍
把b转换成二进制数。
该二进制数第i位的权为2的i-1次方

例如a^11
11的二进制是1011
11=(23)*1 + (22)*0 + (21)*1 + (20)*1
因此,我们将a¹¹转化为算a(2^0)*a(2^1)*a(2^3)

代码实现

#include<iostream>
using namespace std;int qmi(int m, int k, int p)//求m的k次方取余于p
{int res = 1%p, t = m%p;while (k){if (k & 1)//{等效于if(k%2==1)}判断k转化为2进制后最后一位数是不是1{res = res * t % p;}t = t * t % p;k >>=1;//2进制数/2,即2进制删除最后一位数{等效于k/=2}}return res;
}int main()
{int m, k, p;cin >> m >> k >> p;cout << qmi(m, k, p);return 0;
}

输入样例

3 2 7

输出样例

2

【快速幂】a^b%p问题相关推荐

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

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

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

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

  3. 快速幂 + 矩阵快速幂

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

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

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

  5. 牛客网练习赛44-B(快速幂+模拟)

    题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...

  6. 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...

  7. HDU4549(矩阵快速幂+快速幂)

    f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...

  8. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]

    解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...

  9. 解题报告(一)B、(CF453D) Little Pony and Elements of Harmony(FWT经典套路 + 任意模数 k 进制FWT + 快速幂)(2)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  10. 【学习笔记】超简单的多项式快速幂

    整理的算法模板合集: ACM模板 目录 P5245 [模板]多项式快速幂 普通版(a0=1a_0=1a0​=1) vector版本AC代码 加强版(a0≠1a_0 \neq 1a0​​=1) 点我看 ...

最新文章

  1. 关于CVPR 2019投稿的一些感想
  2. 树莓派3B用Ubuntu MATE安装ros
  3. poj1201Intervals(差分约束)
  4. 利用mybatis-generator自动生成代码
  5. 计算机辅助设计的发展及应用,计算机辅助设计的发展与应用
  6. GlassFish下手动部署JSF程序
  7. 团队作业——Alpha冲刺 4/12
  8. html5拼图微信小游戏,微信小程序:拼图游戏
  9. vos对接ims光猫
  10. 计算机怎么改鼠标标志,电脑鼠标指针怎么改 修改电脑鼠标指针方法【图文】...
  11. Shell脚本——条件语句
  12. 【编程100%】22-08 字符串子序列
  13. 计算机网络(3)--应用层协议--HTTP与HTTPS
  14. 这4大场景正被区块链“残忍屠杀”,15个活生生的例子了解一下?
  15. 最新《PHP全套学习课程》
  16. 组合数c(n,m)计算的四种方法
  17. Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...
  18. java excel cell 设置样式_java中对Excel的创建、样式修改
  19. 开源许可协议 | GNU GPL
  20. ker矩阵是什么意思_矩阵求逆的几何意义是什么?

热门文章

  1. 《Asp.Net 2.0 揭秘记(十四)
  2. 仿微信选项卡主页面创建
  3. yii2分页的基本使用及其配置详解 1
  4. [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  5. HP刀片带外管理系统OA各功能实例示范
  6. can not find Artifact XXX 的原因
  7. PCB设计常见的有那些问题
  8. ASP.NET:创建Linked ValidationSummary, 深入理解ASP.NET的Validation
  9. MAC在命令行运行不带窗口的 Emacs -- 比窗口模式占用的资源更少一些
  10. 从2013年下半年始计算机等级考试大纲有重要调整