在对于字符串 S 的一个子串 S[x:y],我是这么求哈希值的,但不知道哪里错了,求大佬指点:
for(register int i=1;i<=k;i++) fac[i]=fac[i-1]*base%MOD;
make_hash(s,n,v);
return hash_val(x,y);
哈希函数是这么写的:
inline void make_hash(char*c,int len,ll*hash)
{
for(register int i=1;i<=len;i++) hash[i]=(hash[i-1]*base+c[i])%MOD;
}
然后取哈希值是这么写的:
inline ll hash_val(int x,int y)
{
ll b=(v[x-1]*fac[x-1]%MOD);
return (((v[y]-b)%MOD)+MOD)%MOD;
}
但是对于一个 x,y 它返回的结果跟正确的差很多,求大佬指出错误