高精度快速幂(求梅森数)

梅森数
题目描述:求解 2 n − 1 2^n-1 2n1 ( 1000 < n < 3100000 ) (1000<n<3100000) (1000<n<3100000),求解该数的位数,以及后500位。
由于这个数一定超过了,long long的范围,所以一定要使用高进度算法,
第一次尝试,首先由于题目只要求解后 500 500 500位,但是我认为如果只求后 500 500 500位,好像并不能得出该数的位数,所以我还是求出每一位,然后再取前 500 500 500位。但是我认为这个算法必定会超时的,因为对于限制时间是一秒的,只能大概计算 1 0 8 10^8 108,n最大时,会到 1 0 6 10^6 106,而这个数肯定会超过 1 0 2 10^2 102,所以一定会超时的。所以我去百度查了一下 2 n − 1 2^n-1 2n1有啥特殊性质,发现有一个高中时经常见到的性质,
2 n − 1 = 2 0 + 2 1 + 2 2 + ⋅ ⋅ ⋅ + 2 n − 1 2^n-1=2^0+2^1+2^2+···+2^{n-1} 2n1=20+21+22++2n1
证明:令 S = 2 0 + 2 1 + 2 2 + ⋅ ⋅ ⋅ + 2 n − 1 S=2^0+2^1+2^2+···+2^{n-1} S=20+21+22++2n1,则 2 S = 2 1 + 2 2 + 2 3 + ⋅ ⋅ ⋅ + 2 n 2S=2^1+2^2+2^3+···+2^{n} 2S=

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值