慢速幂(转自ooo于Vjudge上的同名博客)
ex_tjy 慢速幂(极不正经版)
感谢tjy大佬提供思路
本文将为大家伙介绍由tjy大神提出并由ooo蒟蒻证明的慢速幂
如不是闲得慌,本着珍爱生命的原则,
建议:
请勿浏览
并不华丽的分界线
正文
引子:
OVO
听说过二分吗,少年?
听说过快速幂吗,少年?
那么,如果把他们结合起来,又会发生什么呢?
答案是:慢速幂;
支持unsigned long long
范围内$\Theta(64)$计算
机理:
OVO
对答案区间进行二分
定义$minn=1,maxn=inf$(极大值)
我们可以考虑:
- 对于$a^b=a^b$,可推得:$\log_a a^b=b$;
- 由换底公式得:$\lg a^b \div \lg a=b$;
- 由等式的基本性质得:$\lg a^b=b \times \lg a$;
于是乎,我们会开心的发现,我们已经可以通过二分枚举$a^b$求解了
完结撒~~
撒什么花
我们还没解释为什么它是慢速幂呢好吧!!!
因为毕竟是二分,复杂度为$\Theta(log_2 n)$;
有因为n被我们严格限制为$2^{64}$;
故时间复杂度恒为$\Theta(64)$
故亦被miemeng称为"恒速幂";
易证:对于任意 $n \neq 1$且$n$属于$N^*$ ,$n^{64} \geqslant 2^{64}$;
所以暴力连乘时间复杂度$\Theta(n \leqslant 64)$
我们可爱的二分慢速幂效率等于连乘当且仅当
$a=2,b=64$
故称慢速幂;
至于应用?
联系复杂度分析??
或许也只有这一点用处了…………………….
那为什么还会打这么多字来介绍这毫无用处的东西(懵.png)
要知道我们要有探索精神,
既然这种想法被提出了
我们至少也要证明它是无用的
否则还不如不要提出来(毫无征兆的的大段鸡汤)
…………………………….
所以,完结撒花!
不要因为我浪费了大家的生命打我——ooo
(原文有删改)