快速幂&&龟速乘&&快速乘
作者:互联网
背景
今天有一道题死活过不去,然后看大佬的博客,发现需要用到龟速乘。
然鹅我并不知道什么是龟速乘,于是就去查了QAQ
然后还被安利了快速乘。
做题的时候经常需要求解形如 ab mod c 的式子。
当b的值比较小的时候,我们可以使用 循环乘【基本挂掉 或者 快速幂。
快速幂
我知道大家都会,所以放个代码滚了
算法时间复杂度 O(log n)。
龟速乘
快速幂多么优秀的复杂度啊。
然鹅总是会有很多很多的毒瘤出题人,会造诸如一下这组数据的一大堆数据点。
19260817 2333333 1234567654321
快速幂爆了QAQ【当模数>1e9的时候,在相乘的时候爆long long了
????手写高精度????
不,我们选择龟速乘。
比起计算机自带的乘法,龟速乘的的运行速度要慢上一些。
但是,它可以保证快速幂不会boom的一声炸掉,然后送给你一个神奇的数字。
把龟速乘和快速幂放在一起看,可以发现,造成快速幂爆掉,而龟速乘没事的原因就是
快速幂里的x是指数级增长,而龟速乘变成了翻倍
快速乘
被旁边的大佬安利了快速乘,于是去学了。
人们在研发出上面龟速乘以后,再也不用为了次方运算+取模的题型烦恼了……
然而,总是有人不满足:
那就是复杂度为O(1)的,一行可以打完的,快速乘的诞生。
从大佬的博客里面看到了这个
这是2009国家集训队论文:
骆可强:《论程序底层优化的一些方法与技巧》
顺便%%%%%%%%%%%%%%一发
其实上面那一坨术语意思就是:
long double 存下会爆 long long 的值,完成运算之后,再把不会爆 long long 的值塞回去。
不过再好的算法都会有漏洞,快速乘的缺点就在于,可能会产生由于long long和long double互相转换而产生的精度损失。
总结
每个算法都有利有弊,还是根据情况选择使用吧QAQ
标签:龟速,QAQ,复杂度,long,&&,大佬,快速 来源: https://www.cnblogs.com/qxyzili--24/p/11235649.html