思路:这题只需要预处理前缀乘再加上逆元就可以轻松解决。
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=9973;
int sum[100005]={1};
int ksm(int x,int y){int ans=1;while(y){if(y&1) ans=ans*x%mod;x=x*x%mod;y>>=1;}return ans%mod;
}
signed main(){int n;string s;while(cin >> n >> s){for(int i=0;i<s.size();i++){//预处理int x=(s[i]-28+mod)%mod;sum[i+1]=sum[i]*x%mod;}while(n--){int l,r;cin >> l >> r;cout << sum[r]*ksm(sum[l-1],mod-2)%mod << endl;}}return 0;
}