麦森数 poj http://poj.grids.cn/solution/1154879/
来源:互联网 发布:证件p图软件 编辑:程序博客网 时间:2024/05/22 15:37
题目:http://poj.grids.cn/solution/1154879/
个人认为这道题 在高精度计算中应该是算有难度的,这道题用了很多技巧
1首先2^p计算要用到一个技巧:
首先把p用二进制表示
p=a0*2^0+a1*2^1+……+an*2^n-1+2^n;
那么
2^p=2^a0*2^2a1*2^4a2*……*2^2^n;
用算法表示就是
while(P)
{
if(P&1)
multiply(a1,a2);
multiply(a2,a2);
P>>=1;
}
这个思想我理解了很久,按我现在的能力也不知道怎么推出这个算法为何快。。
但是,想想,其实就好比 8个2相加,如果一个2一个2的加这样的速度一定很慢,但是如果是先两个2相加得4,在两个4相加得8,两个8得16,两个16得32,这样的话是不是快多了,我的启发就在这种类比的方法,但我估计很少人能理解我的意思。语言表达有待改进。。呵呵
2还有一点就是要用一万进制来储存数字,加快运算速度,假如不这样的话,我们要开辟500位的数组,每次乘法运行 (500+1)*250=125250次普通乘法,而用一万制之后只需(125+1)*62.5=7875次普通乘法,效率自然不同;
3只能用一万制,如果为了方便用十万制的话,即使是unsigned long 也可能存不下计算过程中出现的数,例如 500000^2
4还有就是换行的技巧,是i%25==12,阶段换行,这个得慢慢体会,我也不知道怎么说。。
5不要妄想像计算高精度乘法那道题那样,先算完后,再处理进位,因为如果那样的话,计算过程会出现很大的数,int无法保存,long貌似也不行,得边计算边进位才行。
好了,给代码吧,这代码改了几次后,发现那代码几乎跟答案完全一样,纳闷。。
- 麦森数 poj http://poj.grids.cn/solution/1154879/
- poj武林 http://poj.grids.cn/problem/2785/
- poj 大整数加法 http://poj.grids.cn/problem/2981/
- 大整数除法poj http://poj.grids.cn/problem/2737/
- http://poj.grids.cn/practice/2746--约瑟夫问题
- poj 2的n次方 http://poj.grids.cn/problem/2809/
- 大学课程在线 http://realcourse.grids.cn/
- POJ 2513 solution
- POJ 3253 Solution Report
- POJ 1160 Solution Report
- POJ 1149 PIGS Solution
- POJ 2391 Ombrophobic Bovines Solution
- poj 3650 The Seven Percent Solution
- poj 3650 The Seven Percent Solution
- POJ 3650:The Seven Percent Solution
- POJ 3650 The Seven Percent Solution G++
- solution of POJ:3187.Backward Digit Sums
- solution of POJ 2376.Cleaning Shifts
- java 数据存储器
- 概率,先验概率与后验概率
- 选择排序递归做法
- 浏览器兼容的JS写法总结
- php+AJAX传送中文会导致乱码的问题的解决方法
- 麦森数 poj http://poj.grids.cn/solution/1154879/
- 解决桌面图标有蓝色阴影的问题
- C++声明二维数组
- win7下安装mysql
- 操作DOM文档
- 人民邮电VB范列宝典深入分析
- 合并文件到另一个文件
- 基于J2ME技术的高校学生日程安排系统
- 一个经典的C++日志类