散列和模块算术

时间:2014-04-25 04:40:45

标签: c++ c algorithm hash modular-arithmetic

h(y) 成为 (a*y+b)mod m 定义的函数。因此h(y)可以取值from 0 to m-1. 现在我们给出了7个整数 - a,b,x,n,c,d,m。我们的任务是找到h(x),h(x+1),h(x+2)...h(x+n)的总计数,使h(x+i)的值落在[c,d]的范围内。0<=i<=n 整数限制是:

1 ≤ m ≤ 10^15, c ≤ d < m, a,b < m, x+n ≤ 10^15, and a*(x+n) + b ≤ 10^15

例如。 对于输入set {1,0,0,8,0,8,9},输出应为9.请建议一个有效的算法。感谢!!!

1 个答案:

答案 0 :(得分:0)

这不是一个特别强大的哈希。关于这个问题唯一困难的部分是使用单字母变量的钝符号并将问题指定为7元组。

x的每个增量h(x)增加a。因此xcd的总距离只是 (d-c)/a 。为fencepost问题添加一个,或者为了理智而指定半开范围的问题。