专栏文章

[NOIP 2003 普及组] 麦森数

P1045题解参与者 10已保存评论 12

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
12 条
当前快照
1 份
快照标识符
@mip4qnxz
此快照首次捕获于
2025/12/03 06:08
3 个月前
此快照最后确认于
2025/12/03 06:08
3 个月前
查看原文
一篇 python 题解。
先看第一问。一个数 xx 的位数,相当于 log10x+1\log_{10} x + 1。用我们小学二年级就学过的换底公式,可以得到: log102P+1=log22Plog210+1=Plog210+1\log_{10} 2^{P} + 1 = \dfrac{\log_{2} 2^P}{\log_{2} 10}+1=\dfrac{P}{\log_{2}10}+1
再看第二问,要我们求出 2Pmod105002^P \bmod 10^{500} 的值。python 中的 pow 函数还可以接受一个参数,表示结果对其取模。pow 函数内部使用快速幂实现,速度非常快,同时其边算边取模避免浪费大量时间。
手写高精题,一边玩去。
PYTHON
from math import log2

n = int(input())
print(int(n / log2(10)) + 1)
P = pow(10, 500)
x = pow(2, n, P)
x = (x - 1) % P
s = str(x)
s = '0' * (500 - len(s)) + s
for i in range(10):
    for j in range(50):
        print(s[i * 50 + j], end="")
    print()

评论

12 条评论,欢迎与作者交流。

正在加载评论...