信息竞赛笔记(2)––快速幂

news/2024/12/20 2:13:36/

目录

快速幂

定义

分析 

代码

递归实现

非递归实现(通用方法)

 模意义下取幂


快速幂

定义

快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在O(log\: n)的时间内计算a^{n}的小技巧,而暴力的计算需要O(n)的时间。

这个技巧也常常用在非计算的场景,因为它可以应用在任何具有结合律的运算中。

                                                                                                                ––––摘于OIwiki

分析 

        我们算n个a相乘是,有时候会因为数据太大而超时,枚举的方法就不适用了.但是我们知道a^{b+c}=a^{b}\times a^{c},a^{nm}=(a^{n})^{m}.二进制取幂的想法是,我们将取幂的任务按照指数的 二进制表示 来分割成更小的任务。

        于是我们只需要知道一个快速的方法来计算上述 3 的a^{k}次幂的序列。这个问题很简单,因为序列中(除第一个)任意一个元素就是其前一个元素的平方。 

        举个栗子:

        

这么说,如果你想要计算3^{15},就可以推出以下式子:

3^{15}=3^{1}\times 3^{2}\times 3^{4}\times 3^{8}=\cdots 

根据上述举例不难发现,求大数字的幂运算已经被我们转化成了形式相同的子运算

代码

代码的话我认为有两种思路,一种是递归实现,一种是非递归实现.

递归实现

long long qkpow(long long x,long long y){if(y==0){return 1;}long long res=qkpow(x,y/2);if(y%2){return res*res*x;}else{return res*res;}
}

非递归实现(通用方法)

由于递归的时间太慢了,所以我们一般不用递归来求快速幂,而是用普通的位运算来求快速幂,理论上两者的时间复杂度是相同的,都是O(log\: n),但是实践上第二种要比递归快得多

long long qkpow(long long x,long long y){long long res=1;while(y>0){if(y&1){res=res*x;}x=x*x;y>>=1;}return res;
}

 模意义下取幂

        模意义下取幂也是一种常见的算法思路,它也可以应用在许多方面,例如它可以用于计算模意义下的乘法逆元。

        既然我们知道取模的运算不会干涉乘法运算,因此我们只需要在计算的过程中取模即可。

long long qkpow(long long x,long long y){long long res=1;while(y>0){if(y&1){res=res*x%m;}x=x*x%m;y>>=1;}return res;
}


http://www.ppmy.cn/news/210237.html

相关文章

柯尼卡/Konica打印扫描一体机无法扫描

此电脑右击属性选中【服务】Windows Image Acquisition(WIA) 设置下登录身份到【本地系统账户】,恢复设置全部改为重新启动服务,重启下服务就行了。

便民,合格证自助打印一体机投用,只花一分钟即可实现领取实体证

斯科德结合多年的证卡打印、护照打印等行业经验以及独立开发软件的开发经验,开发了用于外网提交终端打印、终端提交终端打印的一体化合格证自助打印终端。它可以解决排队长、等待时间长、人力资源紧张等问题。以前考完试,要等到培训机构拿到证后才通知考…

android 激光打印机,#本站首晒# 安卓端无线打印的方案选择 兄弟 DCP1618W 一体机...

#本站首晒# 安卓端无线打印的方案选择& 兄弟 DCP1618W 一体机 2016-03-18 16:30:00 17点赞 93收藏 38评论 搜了一下,发现原创里有关“兄弟”打印机的晒单评测比较少,所以就把自己这次选购和使用的过程写出来,供大家作个参考。 一、需求及…

如何使用BlindScanner共享打印一体机中的扫描功能

没有带网络接口的打印一体机通过设置打印机共享可以很方便的为整个办公局域网实现打印共享。但是对于如何共享扫描功能却没有直接类似共享打印机办法,只能借助第三方软件才可以实现。本文介绍如何使用 BlindScannerPro 软件来实现扫描功能的共享: 一、服…

Word 双面打印

打印机支持双面打印时设置方法: 若要检查您的打印机是否支持双面打印,可以查看打印机手册或咨询打印机制造商,也可以执行下列操作:   1、单击“文件”选项卡;   2、单击“打印”;   3、在“设置”下…

epson喷墨一体机打印照片偏色的调整

本文经验针对普通用户。 打印机 有一台EPSON L365系列墨仓式打印一体机,使用状况良好。该款打印机定位于家用,墨仓式设计降低了打印成本。功能齐全,支持Wi-Fi无线打印,支持复印,扫描。支持从手机/IPAD移动设备APP打印照…

用springboot创建helloworld项目

目录 一、什么是springboot 二、使用idea构建springboot (1)下载idea (2)在idea配置maven (3)利用springboot构建1个helloworld的web项目​编辑​编辑 ​编辑 (4)启动springboot…