1 条题解

  • 0
    @ 2025-8-25 20:45:59

    只需要算出 2p1mod105002^p−1 mod 10 ^{500}的值就可以了,看似是一道高精度模板题

    但是当我们写好高精度的时候就会发现超时了,P 的最大值会达到 3100000,乘以要维护的 500 位数,就达到了 1.55×1091.55×10^9次的运算。因此我们需要改进。

    改进的方法有很多,例如在高精度乘法时不是每次乘以 2,而是 2n2^n。考虑到 unsigned long long最多只能够表示 26412^{64}-1,我们可以每 2602^{60}进行一次乘法,这样所需要的运算次数就降低到了约 2.58×1072.58×10^7,已经是在可接受范围内了。

    另外计算位数,我们可以通过对数的基本性质:logabn=nlogablogab^n=nlogab,把 2p2^p的计算回避掉,从而变成 plg2+1⌊plg2⌋+1

    • 1

    信息

    ID
    5320
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    5
    已通过
    2
    上传者