求逆元:
欧几里得(通用)
费马小定理(P为质数,比赛最常见)!
线性求逆元(求P以内的 所有 整数对应的逆元)
欧拉定理(p不是质数)
∏求乘积Σ求和
2016"百度之星" - 资格赛(Astar Round1) promble A
要先预处理使得sum[i]表示从第一个点到第i个点的乘积之和!
然后sum[y]/ sum[x-1] 就是答案!
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=1e3+5;
const int mod=9973;
ll ans[maxn*100];
string s;
int kspow(int a,int b){
int ans=1;
while(b){
if(b%2) ans=(ans*a)%mod;
b/=2;
a=(a*a)%mod;
}
return ans;
}
int main(){
int n,a,b;
while(cin>>n){
cin>>s;
//注意:s是从0开始存的,但ab是从1~len里取
ans[0]=1;
for(int i=0;i<s.length();i++){
ans[i+1]=ans[i]*(s[i]-28)%mod;
}
for(int i=1;i<=n;i++){
cin>>a>>b;
printf("%d\n",ans[b]*kspow(ans[a-1],mod-2)%mod);
/* mod为质数时 求逆元可用小费马(结合快速幂一起用)
(b/a)%mod = b* a^-1% mod
a^-1 = a^(mod-2) */
}
}
return 0;
}