1 条题解
-
0
自动搬运
来自洛谷,原作者为

ftiasch
这个学院最强大的女孩子的朋友搬运于
2025-08-24 22:07:31,当前版本为作者最后更新于2022-12-30 13:15:54,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这是一篇关于常数的题解,截止 2022 年 12 月 30 日我是最优解。
算法的常数
为了方便分析,假设 ,也就是 .
如果使用矩阵乘法,两个 的矩阵相乘需要 次乘法(如果考虑 Strassen algorithm 则是 7 次),所以计算 需要 次乘法( 次平方, 次乘法)。
一个更好的方法是设 ,,。我们有递归关系:
- 当 是偶数的时候,,, ,这需要 次乘法。
- 当 是奇数的时候,, ,,这需要 次乘法。
所以计算 需要 次乘法。
当然,当 是奇数的时候,我们可以先计算 和 ,然后 , , ,这需要 5 次乘法。总共计算 需要 次乘法。
实现的常数
根据我的 benchmark,在 64 位模数下,Barrett Multiplication 比直接调用
%快 4 倍。------------------------------------------------------------------------------- mod_64 - BarrettMod64T<> benchmark name samples iterations mean bench 100 3 4.5259 us ------------------------------------------------------------------------------- mod_64 - NonConstMod64T<> benchmark name samples iterations mean bench 100 1 19.6215 us ===============================================================================所以你应该使用 Barrett Multiplication。
最后加上快速读入。
- 1
信息
- ID
- 4102
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者