【已解决】问题: rolling hash中mod计算技巧不理解
https://cp-algorithms.com/string/string-hashing.html
求字符串s的rolling hash
加法操作后取模 (a + b)% m
规则:(a + b + c) % m = (a % m + b % m + c%m) %m
其实,只要在做完“+”的操作后,对和再取一次模,就能保证结果的正确性,(期间,可能重复多次取模,不影响最终结果)
比如(2 + 5 + 3 + 7) % 2 = 1
可以这么计算:
(2 % 2 + 5 + 3 + 7)% 2 = 1
( ((2 % 2) + 5 ) % 2 + 3 + 7 ) % 2 =1
long sum = 0;
for(int i = s.length() - 1; i >= 0; s--){
long val = s.charAt(left) - 'a' + 1;
sum = (sum * power + val) % modulo;
}
减法操作后取模 (a - b) % m
规则:(a - b) % m = (a % m - b % m + m) %m
其实,只要在做完“-”的操作后,对差值再取一次模,就能保证结果的正确性
被减数,减数 可以多次取模,也可以不取模,只要保证:求完差值后,一定要取模
比如(7 - 2) % 3
可以这么计算:
(7 % 3 - 2 + 3 )% 3 = 2 等价于 (7 % 3 - 2 % 3 + 3 ) % 3 = 2
浙公网安备 33010602011771号