码迷,mamicode.com
首页 > 其他好文 > 详细

[CODEVS 1087] 麦森数

时间:2015-02-25 19:55:53      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:麦森数   高精   

描述

计算2P-1的位数和最后500位数字


分析

有一个公式,2^p的位数是p*lg2以十为底 2 的对数. 证明 :

2p=10lg2p=10p?lg2

10^(p*lg2)的位数是p*lg2 + 1位.
那么2^p的位数就是p*lg2 + 1位. 因为2^p是绝对不会等于1000….000之类的数的, 所以2^p - 1位数和2^p一样, 都是p*lg2 + 1位. 那么我们就可以在读入 n 后快速使用 math 库的 log 函数计算位数, 而不需要后面高精去计算了. 因为高精算是会超时的. 不过注意这里 log 计算是以 e 为底, 要使用换底公式 lg2 = log2 / log10.

其他的就是普通的高精了, 位数高于500位后截后500位计算即可. 但数组开二倍吧.


代码

https://code.csdn.net/snippets/607738

PS: 把 maxn 改成 1000 就可以做 CODEVS 2123 麦森数 2 了.

[CODEVS 1087] 麦森数

标签:麦森数   高精   

原文地址:http://blog.csdn.net/qq_21110267/article/details/43939081

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!