[CODEVS 1087] 麦森数

描述

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


分析

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

2p=10lg2p=10plg2

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 了.

posted @ 2015-02-25 19:35  wfwbz  阅读(161)  评论(0编辑  收藏  举报