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

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

是的我要痛心疾首的写一遍快速幂的模板……原本以为这玩意很简单的,然而事实证明……

板子都背错了还说啥?(实际上板子从一开始写的就不对……)
好的那我们开始吧。
————————————
勇者最近发现怪物们的行为异常了起来。
这其中异常的大概是积木怪,原本互相分散的他们竟然开始朝着一个方向去集合。
“莫非……”勇者想到了可怕的想法,那是三十年一次的。
“积木怪攻城!”

(瞎编题时间)

已知积木怪的数量为n,他们的个体攻击力为2,但是n个积木怪叠加起来的话,他们的总攻击力就会变成可怕的2的n次幂。
不过好在积木怪这种没脑子的家伙罗高了就会倒塌,经过古代贤者对于这种生物的考究,这种生物的攻击力始终不会超过1e9+7,因此你只需要把结果对1e9+7取模即可。
————————————
“其实积木怪挺善良的……要是换做别的组合怪的话,可能就要用到高精度了……”路由器一边嘟囔着,看着勇者用c++魔法语言自带的pow函数去清理小怪——毫不费事。
“等等,什么时候出来了这么大的怪……快算啊pow……”
【提示:您的体力值为0,已经自动回城】
“什么鬼?计算出来的结果这么大……”
回城后,pow憋了五六秒的时间才给出了结果,这令勇者十分的沮丧。
“没事,我们还有一招!”
路由器将勇者带到了照相馆那里,很轻易翻到了一本魔法书。
“快速幂”
“快速幂采用二分的思想,对于任意的k的n次幂,如果n为偶数,那么就等于k^(n/2)*k^(n/2),如果为奇数则再多乘以k即可。”
“利用递归的思想,我们很容易写出如下的代码。”

#include
#include
#include
#include
#include
#include
using namespace std;const long long q=1e9+7;long long qpow(long long k,long long n){ if(n==0)return 1; if(n==1)return k; long long p=qpow(k,n/2)%q; if(n%2==0)return p%q*p%q; else return p%q*p%q*k%q;}int main(){ int n; scanf("%d",&n); printf("%lld",qpow(2,n)%q); return 0;}

“怎样,是不是很简单啊!”

转载于:https://www.cnblogs.com/luyouqi233/p/7706032.html

你可能感兴趣的文章
在Angular中操作DOM:意料之外的结果及优化技术
查看>>
编写一个webpack的loader(1)
查看>>
《金三银四面试系列》— jvm与性能优化
查看>>
iOS K线三方库 - ZXKLine
查看>>
必须明白的浏览器渲染机制
查看>>
Linux 内核101:异步IO
查看>>
UINavigationBar 的详解 (基于 API)
查看>>
太坊智能合约开发第一篇:IDE对solidity语法的支持
查看>>
web-audio-api可视化音乐播放器,实现暂停切换歌曲功能,粉色系专场~
查看>>
Fiddler抓包和修改WebSocket数据,支持wss
查看>>
Python知识点总结篇(五)
查看>>
戴老师的学习验收(一,二)
查看>>
站在巨人的肩膀上:原生JS实现基于Promise/a+规范的Promise(篇一)
查看>>
MySQL数据库优化分析
查看>>
jQuery源码解析之width()
查看>>
【从蛋壳到满天飞】JS 数据结构解析和算法实现-红黑树(二)
查看>>
总结Spring Cloud各个组件配套使用
查看>>
highcharts中漏斗图和金字塔图的对比
查看>>
数据结构之「哈希表」
查看>>
小白学Java之Java简介及应用场景
查看>>