快速幂问题
快速 问题
2023-09-27 14:25:47 时间
快速幂就是快速算底数的a^n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
以a^10为例。我们知道,求一个数的平方是很快的,因为不用循环。那么a^10能不能转化为谁的平方?没问题,a^10是a^5的平方,也就是说,如果a^5求出来了,那么接下来只需对这个结果平方就能得出结果,并且少做了4次乘法(求平方本身需要一次乘法)!
a^5能不能用类似的方法求出来?按照刚才的思想,指数应该能被2整除。我们可以先求a^4,然后再乘一个a就是a^5。很明显,a^4是a^2的平方,而a^2可以直接求出来。于是我们最终只做了4次乘法。
总结刚才的思路,则有
n是零
n是偶数
n是奇数
程序设计原理
以下以求a的b次方来介绍
把b转换成二进制数。
该二进制数第i位的权为
例如:
11的二进制是1011
因此,我们将a¹¹转化为算:
快速幂可以用位运算来实现
b & 1//取b二进制的最低位,判断和1是否相同,相同返回1,否则返回0,可用于判断奇偶
b>>1//把b的二进制右移一位,即去掉其二进制位的最低位
快速幂完整代码
#include<cstdio>
long long quickpower(long long a,long long n) {
long long ans=1,cnt=a;
while(n){
if(n&1){ans*=cnt;}
cnt*=cnt;
n>>=1;
}
return ans;
}
int main()
{
long long a,n,ans;
scanf("%lld %lld",&a,&n);
ans=quickpower(a,n);
printf("%lld",ans);
return 0;
}
相关文章
- hdu4291 暴力循环节+矩阵快速幂
- 如何在本地快速复现线上问题
- python包导入路径报错问题,以及解决快速定位到相应的包
- 【BZOJ4870】组合数问题(动态规划,矩阵快速幂)
- 推荐必读:测试人员如何快速熟悉新业务?
- 如何在五分钟内快速反馈Oracle数据库问题
- docker 安装kafka(快速)
- CSS 基础【快速掌握知识点】
- 简单快速解决vi编辑时出现E325:ATTENTION的问题
- 快速解决集成华为AGC服务提示miss client id问题
- 深度强化学习算法(深度强化学习框架)为考虑可以快速适用多种深度学习框架建议采用弱耦合的软件设计方法——快速适用于多种深度学习计算框架的深度强化学习框架设计方案
- 快速排序
- 网络安全问题频出:全球化、跨行业、快速变异成新特点
- 快速幂
- 【C++快速上手】九、virtual学习笔记
- 关于winfrom中如何快速导出DataGridView数据到excel中的问题
- Easy Way to Get All Dependent Library Names 快速获得所有依赖库名称
- CAD中如何将图形对象快速转换成三维曲面?
- 如何快速搭建一个 linux 全方位资源监控系统并带有炫酷的表盘图形统计?
- 国家存储器项目建设快速通电