信息
- ID
- 5320
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 5
- 已通过
- 2
- 上传者
只需要算出 2p−1mod10500的值就可以了,看似是一道高精度模板题
但是当我们写好高精度的时候就会发现超时了,P 的最大值会达到 3100000,乘以要维护的 500 位数,就达到了 1.55×109次的运算。因此我们需要改进。
改进的方法有很多,例如在高精度乘法时不是每次乘以 2,而是 2n。考虑到 unsigned long long最多只能够表示 264−1,我们可以每 260进行一次乘法,这样所需要的运算次数就降低到了约 2.58×107,已经是在可接受范围内了。
另外计算位数,我们可以通过对数的基本性质:logabn=nlogab,把 2p的计算回避掉,从而变成 ⌊plg2⌋+1。