pow函数与快速幂(优化)(O(logn)的复杂度)
我们发现,在int型下使用pow函数求5的三次方,结果为124。
如图:
原因:
pow函数的返回值为double型,因浮点数长度问题,存在截断误差。
解决方法:
将变量定义为double型
有没有更快求幂的方法?
假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b),即是O(n)级别。但快速幂能做到O(logn)的复杂度。
快速幂:
对于二进制的位运算,我们需要用到"&"与">>"运算符,详见位运算符的应用。
先上实现快速幂运算的具体代码:
int qsm(long long m, long long k, long long p) //(m^k)%p
{long long res = 1, t = m;while (k){if (k&1) res = res * t % p;t = t * t % p;k >>= 1;}return res;
}
LL quickPow(LL a,LL b,LL mod) // //(a^b)%mod
{LL res=1;while(b>0){if(b&1)res=(res%mod*a%mod)%mod;b>>=1;a=(a%mod*a%mod)%mod;}return res;
}
其中“b & 1”指取b的二进制数的最末位,如11的二进制数为1011,第一次循环,取的是最右边的“1” ,以此类推。
而“b >>= 1”等效于b = b >> 1,即右移1位,删去最低位。
以a^11为例:
b的二进制数为1011,二进制从右向左算,但乘出来的顺序是 a^(2^0)*a^(2^1)*a^(2^3),是从左向右的。我们不断的让base *= base目的是累乘,以便随时对ans做出贡献。
要理解base *= base这一步:因为base * base == base ^ 2,下一步再乘,就是(base ^ 2) * (base ^ 2) == base ^ 4,然后同理(base ^ 4) * (base ^ 4) == base ^ 8,由此可以做到base → base ^ 2 → base ^ 4 → base ^ 8 → base ^ 16 → base ^ 32.......指数正好是 2 ^ i 。再看上面的例子,a¹¹= (a ^ 1) * (a ^ 2) * (a ^ 8),这三项就可以完美解决了,快速幂就是这样。
pow函数与快速幂(优化)(O(logn)的复杂度)相关推荐
- c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)
就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...
- 蓝桥杯 - 垒骰子(动态规划+矩阵快速幂优化)
垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...
- AtCoder abc256全题解(区间合并模板、矩阵快速幂优化dp、线段树……)
文章目录 A B C-枚举 D-区间合并模板 E-图论建模,函数图的性质 题意 思路 代码 F-树状数组 题意 思路 代码 G-矩阵快速幂优化dp H-线段树 思路 实现 传送门 本文CSDN 本文j ...
- 15年第六届蓝桥杯第九题_(矩阵快速幂优化的动态规划)
垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...
- CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
CF传送门 洛谷传送门 [题目分析] 在zxy大佬的讲解下终于懂了这道题的做法了qwq... 首先根据题意,出发点不一定在特殊点上,但第一次操作后,之后所有的操作都是在特殊点上,所以先考虑从线上出发的 ...
- 【POJ - 3744】Scout YYF I(概率dp,矩阵快速幂优化dp)
题干: 题目大意: 在一条不满地雷的路上(无限长),你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的可能坐标范围:[1,100000000]. 每次前进p的概率前进一步, ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】
涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...
- Q老师度假(变形矩阵快速幂优化DP)
问题描述 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期. 假期中不同的穿衣方式会有不同的快乐值. 已知 Q老师 一共有 M 件衬衫,且如果昨天穿的是衬衫 A,今天穿的是衬衫 B,则 Q老师 今天 ...
最新文章
- 7.11.4 第一个程序 设置环境变量
- 国家电网公司“SG186”工程总部企业门户开发实施
- python 合并排序的数组
- 那些计算机界的伟大女性
- 显示屏连接控制卡超时_小间距led显示屏的安装步骤
- 外包物料成本核算时的供应商确定
- FPGA基础之逻辑单元(LE or LC)的基本结构
- Python Cookbook 3rd Edition Documentation
- MyBatis的mapper.xml中对于一个传参的多重判断
- electron 爬坑记
- 论文笔记_RSS_2014_激光SLAM_LOAM_实时LIDAR定位与建图
- 新编c语言程序设计案例教程 pdf下载,新编C语言程序设计教程本科第章.pdf
- 计算机一级考试繁体字换成简体字,EXCEL繁简体转换 电脑显示的繁体字改成简体字...
- 2021年全球与中国油管线轴行业市场规模及发展前景分析
- 肩负移动未来的“LTE”,终端开发遭遇两个壁垒
- pdo mysql dsn_使用PDO构造函数连接数据库及DSN详解
- 配置一个好看的PowerShell
- 天平与天蝎的神话(转)
- 第十一次作业 - Alpha 事后诸葛亮
- 安装PhotoShop报错 无法写入注册表值请检查权限(错误代码160)