我是题目

快速幂就是快速求 \(a^b\)的一种算法

快速幂

思想 :

比如我要求 \(6^9\)

首先将幂转化为二进制形式 :

\[6^9 = 6^{1001} \tag{1}
\]

可以得到 :

\[6^9 = 6^{2^{3}} \times 6^{2^0} \tag{2}
\]

由于一个数变成二进制位数为\(\log _2\boldsymbol{b}\) 位, 故相对于直接求幂 ( b位需要b次计算 ), 时间复杂度减小了

取余

两条基本性质 :

\[\left( \boldsymbol{X}+\boldsymbol{Y} \right) \,\,\% \boldsymbol{a}\,\,=\,\,\left( \boldsymbol{X}\%\boldsymbol{a}+\boldsymbol{Y}\%\boldsymbol{a} \right) \%\boldsymbol{a} \tag{1}
\]

\[\left( \boldsymbol{X}\times \boldsymbol{Y} \right) \,\,\% \boldsymbol{a}\,\,=\,\,\left( \left( \boldsymbol{X}\%\boldsymbol{a} \right) \times \left( \boldsymbol{Y}\%\boldsymbol{a} \right) \right) \%\boldsymbol{a} \tag{2}
\]

上代码

ll qpow(ll x, ll y, ll mod)  {
ll ans = 1;
ll base = x;
while(y > 0) {
if(y & 1){
ans *= base;
ans %= mod;
}
base *= base;
base %= mod;
y>>=1;
}
return ans % mod;
}

不取余的版本

ll qpow(ll x, ll y)  {
ll ans = 1;
ll base = x;
while(y > 0) {
if(y & 1){
ans *= base;
}
base *= base;
y>>=1;
}
return ans;
}

与pow的时间比较

对比一下时间 :

快速幂 : 0.796s

普通求幂 :2.092s

[每日一题2020.06.15]P1226 【模板】快速幂取余运算的更多相关文章

  1. 洛谷 P1226 【模板】快速幂||取余运算

    题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...

  2. LuoguP1226 【模板】快速幂||取余运算

    题目链接:https://www.luogu.org/problemnew/show/P1226 第一次学快速幂,将别人对快速幂原理的解释简要概括一下: 计算a^b时,直接乘的话计算次数为b,而快速幂 ...

  3. P1226 【模板】快速幂||取余运算

    https://www.luogu.org/problemnew/show/P1226 模板题 直接上代码吧 #include<bits/stdc++.h> using namespace ...

  4. 【洛谷P1226 【模板】快速幂||取余运算】

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 作为初 ...

  5. 题解 P1226 【【模板】快速幂||取余运算】

    1.题目分析 原题 本题在于快速幂的使用,以及对long long的应用问题. 2.解题思路 快速幂 求幂常见用法: int pow(int a,int b) { int ans; for(int i ...

  6. 洛谷 P1226 【模板】快速幂||取余运算 题解

    Analysis 快速幂模板,注意在最后输出时也要取模. 快速幂模板 inline ll ksm(ll x,ll y) { ll ans=; ) { ) { ans*=x; ans%=k; } x*= ...

  7. 洛谷P1226 【模板】快速幂||取余运算

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 S1: ...

  8. (分治法 快速幂)P1226 【模板】快速幂||取余运算 洛谷

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 输入输 ...

  9. 【模板】快速幂&取余运算

    输入\(b\),\(p\),\(k\)的值,求\(b^p mod k\)的值.其中\(b\),\(p\),\(k^2\)为长整型数. 1.普通做法 \(print\) \(pow(b,p)\)\(mo ...

随机推荐

  1. Ubuntu下配置Hyperledger Fabric环境

    在win10系统的台式机上安装配置Hyperledger Fabric环境 安装Ubuntu 16.04 双系统 镜像下载地址:https://www.ubuntu.com/download/desk ...

  2. hdu5984概率数学

    转载 https://www.oyohyee.com/post/HDU/5984.html

  3. Shone.Math开源系列1 — 基于.NET 5实现Math<T>泛型数值计算

    Shone.Math开源系列1 — 基于.NET 5实现Math<T>泛型数值计算 作者:Shone .NET 5 preview 4已经可用了,从微软Build2020给出的信息看,.N ...

  4. java,netcore和nodejs api性能测试

    一. 前言 作为有点经验的码农,现在退休在家带孩子.闲来无事,想对使用过的框架(如果写语言容易引战,php是世界上最好的语言)做一个性能测试. 二. 背景 由于毕业后刚开始接触的编程语言是C#, 从a ...

  5. Linux文件列表查询ll和ls区别

    ll ll查询文件列表,查询结果为当前目录下文件和文件夹的详细信息,包括权限.根目录.用户.创建时间等. ls ls查询出的查询结果只显示当前目录下文件夹和文件名称

  6. Linux中查看磁盘大小、文件大小、排序方法小结

    一,查看磁盘空间大小的命令:dfdf命令用于查看磁盘分区上的磁盘空间,包括使用了多少,还剩多少,默认单位是KB 比如以下命令: df -hl执行结果如下: 执行的结果每列的含义: 第一列Filesys ...

  7. html浏览器高度和宽度和其他dom获取

    1.获取网页可见区域的宽度:document.body.clientWidth ; 2.获取网页可见区域的高度:document.body.clientHeight; 3.获取 网页可见区域宽:doc ...

  8. 【Java8新特性】面试官:谈谈Java8中的Stream API有哪些终止操作?

    写在前面 如果你出去面试,面试官问了你关于Java8 Stream API的一些问题,比如:Java8中创建Stream流有哪几种方式?(可以参见:<[Java8新特性]面试官问我:Java8中 ...

  9. 小智的旅行(Bridge)51nod 提高组试题

    luogu AC传送门(官方数据) 题目描述 小智最喜欢旅行了,这次,小智来到了一个岛屿众多的地方,有N座岛屿,编号为0到N-1,岛屿之间 由一些桥连接,可以从桥的任意一端到另一端,由于岛屿可能比较大 ...

  10. 低功耗SRAM主要三部分功耗来源

    随着SOC 技术的迅猛发展,由电池供电的便携式电子产品得到了广泛应用,如智能手机.运动手环.ipad.部分汽车电子等.近年来半导体工艺已进入深亚微米甚至纳米阶段,工艺尺寸不断缩小,但是由于电池技术的缓 ...