我是题目

快速幂就是快速求 \(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. thinkphp路由简介和设置使用

    use think\Route; //静态路由 Route::rule('/', 'index/index/index'); Route::rule('test', 'index/index/test ...

  2. PHP文件目录操作

    目录操作 is_dir ( $path ) 判断当前路径是否为目录 ,返回布尔 opendir ( $path ) 打开路径目录,返回资源 readdir ( $handle ) 读取当前打开目录下一 ...

  3. OpenStack知识点详解

    一:云计算     一.起源 1. 云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网.计算机后信息时代的又一种革新(互联网第三次革命). 2. 云计算的核心是将资源协调在一起,使 ...

  4. MarkDown语法使用(效果版本)

    function syntaxHighlighting() { var n = 33; var s = "hello, こんにちは"; console.log(s); } plai ...

  5. 破解webstorm 亲测有效

    一.首先安装好webstorm,并且配置hosts文件 二.使用以下激活码进行激活,亲测有效可以用到2099年 4RULSIH54N-eyJsaWNlbnNlSWQiOiI0UlVMU0lINTROI ...

  6. node进程间通信

    作为一名合格的程序猿/媛,对于进程.线程还是有必要了解一点的,本文将从下面几个方向进行梳理,尽量做到知其然并知其所以然: 进程和线程的概念和关系 进程演进 进程间通信 理解底层基础,助力上层应用 进程 ...

  7. async/await 内幕【译文】

    C# Under the Hood: async/await 原文地址:https://www.markopapic.com/csharp-under-the-hood-async-await/ 前言 ...

  8. akka-typed(2) - typed-actor交流方式和交流协议

    akka系统是一个分布式的消息驱动系统.akka应用由一群负责不同运算工作的actor组成,每个actor都是被动等待外界的某种消息来驱动自己的作业.所以,通俗点描述:akka应用就是一群actor相 ...

  9. Spring boot Sample 007之spring-boot-log4j2

    一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 spring boot 整合多环境log4j2 三.步骤 3.1.点击File -> New Project -> ...

  10. JavaScript (一) js的介绍及基本语法变量

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.JS 的 介绍 1.JavaScript :简称 : js js 分为三个部分: 1. ECMASc ...