为什么用Horner法则求字符串哈希值过程中每步乘加求模相当于先乘加所有再求模(不考虑溢出)?

private long hash(String s, int M)
{
    long h = 0;
    for (int j = 0; j < M; j++)
        h = (h * R + s.charAt(j)) % Q;
    return h;
}

例如:
(((s[0])*R+s[1])%Q)*R+s[2])%Q
= ((s[0])*R+s[1])*R+s[2])%Q
我总觉得这式子不相等。

我知道有这些等价关系:
(a + b) mod Q = ((a mod Q) + (b mod Q)) mod Q
(a * b) mod Q = ((a mod Q) * (b mod Q)) mod Q

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题