博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速幂算法
阅读量:5272 次
发布时间:2019-06-14

本文共 769 字,大约阅读时间需要 2 分钟。

快速幂算法

之前听过快速幂,似懂非懂,不明觉厉……

今天洛谷智能推荐了一道快速幂的模板题,写了半天还是看题解过的……

Part1

对指数进行二进制拆分

当然不用真的拆,只是用位运算即可。

主要是两个位运算:

>>和&

右移和按位与

 

右移就相当于除以二,但是速度更快,是在二进制下将所有位向右移动一些位。

按位与则是对两个操作数的每一位分别与,一个数&1就是它的最低位,可以快速的判断奇偶性。

Part2

公式(套路)

(图片来源自互联网)

如果p为奇数

  当前答案乘以底数

p除以2

底数自乘

继续判断奇偶,直到p等于0

Attention

如果数据较大,记得取模

最好每算一步,就取一次模

所有数据最好都开long long,以防还没有取模就溢出了

答案最后再取一次模(以防像计算1^0 mod 1这样的式子,因为没有进行快速幂而跳过取模)

Problem

Solution

不就是我嘛……

Code

#include
using namespace std;long long b,p,k,ans;int main(){ cin>>b>>p>>k; cout<
<<"^"<

<<" mod "<

<<"=";//先输出,比较方便 ans=1; while(p>0) { if(p&1) ans*=b; p>>=1; b*=b; b%=k; ans%=k; } cout<

End

转载于:https://www.cnblogs.com/send-off-a-friend/p/11408476.html

你可能感兴趣的文章
STM32空闲中断
查看>>
Python 直接赋值、浅拷贝和深度拷贝解析
查看>>
剑指offer python版 调整数组顺序使奇数位于偶数前面
查看>>
内容提供者编写步骤
查看>>
汇编指令
查看>>
Leader of All Crushing Machines in the Future
查看>>
luogu 4211
查看>>
Sql Server 默认值
查看>>
JavaEE之反射
查看>>
【转】经验分享:大型高并发高负载网站的系统架构
查看>>
HDU 6060 RXD and dividing (求贡献)
查看>>
java中 immutable,future,nio
查看>>
VMware ESX常用命令
查看>>
golang三方包应该如何安装--在线和离线
查看>>
选择排序
查看>>
鼠标移入移出透明度变化效果
查看>>
我工作这十年-世界在变化
查看>>
log4j2 不使用配置文件,动态生成logger对象
查看>>
[IOI2014]holiday假期(分治+主席树)
查看>>
python的上下文管理(contextlib)(2)
查看>>