HDU-5685-Problem A

求逆元板子题,费马小定理求逆元,快速幂,维护前缀积。

#include<bits/stdc++.h>
using namespace std;
//bool isprime(int x)
//{
//	if(x==1) return false;
//	if(x==2) return true;
//	for(int i=2;i<=sqrt(x);i++)
//	{
//		if(x%i==0) return false;
//	}
//	return true;
//}
const int mod=9973;
const int N=1e5+520;
int ans[N];
int qmi(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b&1) ans=ans*a%mod;
		b/=2;a=a*a%mod;
	}
	return ans;
}
string st;int x,a,b;
int main()
{	
	int x,n,a,b;
	string st; 
//	cout<<isprime(x)<<endl;
	while(~scanf("%d",&n))
	{
		memset(ans,0,sizeof(ans));
		ans[0]=1;
		getchar();getline(cin,st);
		int k=st.size();
		for(int i=1;i<=k;i++)
		{
			ans[i]=ans[i-1]*(st[i-1]-28)%mod;
		}
		while(n--)
		{
			scanf("%d%d",&a,&b);
			cout<<ans[b]*qmi(ans[a-1],mod-2)%mod<<endl;
		}
	}
	return 0;
 } 

  

posted @ 2021-07-14 00:11  mofan552  阅读(25)  评论(0)    收藏  举报