[CODEVS 1087] 麦森数
描述
计算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 了.