2^(3K+)

题目描述
输入(PPP1000 < P < 31000001000 < P < 31000001000 < P < 3100000 ) ,计算2P−12^{P}-12P−1的位数和最后500位数字(用十进制高精度数表示)

刚开始,我是想着用vector,把2^p算出来的,可结果实在是太大,时间上也不允许,就可以先算出具体的位数,之后只算后500位即可。

我借鉴了别人的题解之后还是超时了(原谅本菜鸟)。。。

所以附上其他大神题解:

一、求位数

首先我们知道与有着相同的位数,因为2的次方满足了最后一位不为零的要求,所以减一后位数并不会改变,那么我们可以直接求的位数。那么怎么求位数呢?我们不妨设,根据的位数为,我们只要想办法把中的底数2改为10,指数加一就是位数了。由此想到用10的几次方来代替2,那么就不难想到,这样便可以把中的2代换掉,变为。根据乘方的原理,将p乘进去,原式便可化为我们最终想要的形式了,所以位数就是。(提醒一下,C++中cmath库自带log10()函数…)

二、求后500位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值