高效幂算法
2015-06-16 17:11
239 查看
《数据结构与算法分析》mark.Allen.weiss中提供的分治算法
(美) Mark Allen Weiss
计算一个整数的幂 XN 的常见算法是使用 N-1 次乘法自乘。然而我们可以找到更好的算法。可以应用这样一种递归算法:如果
N 是偶数,有XN=XN/2 * X N/2 , 如果 N 是奇数,则有 XN =X (N-1)/2 * X (N-1)/2 * X 。
为了说明这个算法为什么更高效,我们举一个例子。例如计算 X62 ,用第一种的常见算法我们要做61次自乘。而用第二种算法只要做9次乘法:
X3=(X2)X , X7=(X3)2X , X15=(X7)2X , X31=(X15)2X ,
X62=(X31)2
因为求 X3 X7 X15 X31 各做了两次乘法,最后求 X62 又做了一次乘法,总共就是9次。
(美) Mark Allen Weiss
计算一个整数的幂 XN 的常见算法是使用 N-1 次乘法自乘。然而我们可以找到更好的算法。可以应用这样一种递归算法:如果
N 是偶数,有XN=XN/2 * X N/2 , 如果 N 是奇数,则有 XN =X (N-1)/2 * X (N-1)/2 * X 。
为了说明这个算法为什么更高效,我们举一个例子。例如计算 X62 ,用第一种的常见算法我们要做61次自乘。而用第二种算法只要做9次乘法:
X3=(X2)X , X7=(X3)2X , X15=(X7)2X , X31=(X15)2X ,
X62=(X31)2
因为求 X3 X7 X15 X31 各做了两次乘法,最后求 X62 又做了一次乘法,总共就是9次。
#include<iostream> using namespace std; long pow_s(int x, int n)//x的n次方 { if (n == 0) { return 1; } if (n == 1) { return x; } if (n % 2 == 0) { return pow_s(x*x, n / 2); } else { return pow_s(x*x, n / 2)*x; } }
相关文章推荐
- Application Cache---HTML5应用程序缓存Application Cache
- 多线程(高级篇
- java jdbc 链接mysql插入数据中文显示乱码
- FireDAC 下的 Sqlite [8] - 自定义函数
- 期权的理解
- Kinect的学习笔记发展(一)Kinect引进和应用
- shell学习
- 从.net到java系列之jdbc
- bzoj 1076 状态压缩最优期望
- JQ怎么获取margin-left的值
- 求1+2+...+n
- SAT数学解题方法:逻辑推理
- linux 的文件系统 (3)
- 第一题
- 4 sites
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
- SBJson的使用
- Quartz中时间表达式的设置-----corn表达式 (转)
- magento搬家的方法
- FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)