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

转载于:https://www.cnblogs.com/wfwbz/p/4312305.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值