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

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

对于a^b,普通的求法是用一个循环一直乘b个a,这样的方法对于某些题目来说可能显得比较慢。

二分快速幂是一种利用b的二进制特征来快速求a^b的。

例如:

a = 2, b = 35

则b的二进制表示形式为100011

则 a^b = (2^32) * (2^2) * (2^1)

有了这样的思路之后,就不用循环b次了。

假设b的二进制表示有n位,从后往前依次为第1-n位,初始结果为1。则现在只需要从最后一位开始,若该位为0,则略过,若该位为1,则结果乘上a^(2^当前位序号)。最后得到的结果就是a^b了。这样循环执行的次数仅为b的二进制表示的位数,远小于b。

1 long long bigpow(int x, int y) 2 { 3     long long ret = 1; 4     long long tmp = x; 5     while (y > 0) 6     { 7         if (y & 1) ret *= tmp; 8         y >>= 1; 9         tmp *= tmp; //设tem=x^n, 则 tem *= tem 相当于 tem^(2n) 从而为 x^(2^当前位序号) 10     }11     return ret;12 }

 

上述代码中的函数输入参数为两个整型值x和y,返回x^y的值。应当注意的是返回值及临时变量应当设置为范围足够大的数字类型,否则会发生溢出。

转载于:https://www.cnblogs.com/liuzhanshan/p/6064777.html

你可能感兴趣的文章
Nginx(一)
查看>>
Ajax
查看>>
Fast R-CNN(RoI)
查看>>
laravel怎么创建一个简单的blog
查看>>
ServerVersion = “conn.ServerVersion”引发了“System.InvalidOperationException”类型的异常...
查看>>
网络编程——UDP协议,SocketServer模块介绍
查看>>
oracle: 分割字符串,或者查找字段里面的关键字(关键字1,关键字2,关键字3)...
查看>>
向Array中添加改进的冒泡排序
查看>>
linux命令 -- 网站
查看>>
deviceOne -- js的本地搜索
查看>>
Tensorflow--梯度及梯度下降法
查看>>
代码段
查看>>
利用 autoconf 和 automake 生成 Makefile 文件
查看>>
php glob()函数实现目录文件遍历与寻找与模式匹配的文件路径
查看>>
CentOS6.3 编译安装LAMP(2):编译安装 Apache2.2.25
查看>>
》》》《类的继承》
查看>>
cad.net之ACAD移植到GCAD的自动加载问题
查看>>
Java超简明入门学习笔记(一)
查看>>
CaltrainTimes从设计到发布(基于Flex的手机应用)
查看>>
三层架构1
查看>>