Problem A
度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到:
H(s)=∏i≤len(s)i=1(Si−28) (mod 9973)
Si 代表 S[i] 字符的 ASCII 码。
请帮助度熊计算大字符串中任意一段的哈希值是多少。
思路
预处理前缀积,询问时利用前缀相除,由于模是质数,求区间积时用乘法逆元代替除法运算
#include <iostream>
#include <cstdio>
using namespace std;
const int mod = 9973;
int n, l, r, h[123456];
char s[123456];
int powermod(int a, int n, int m) {
int r = 1;
while (n) {
if (n &