hdu 5685

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5685

解题思路:前缀积+费马小定理求逆元。

AC代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<bits/stdc++.h>
 4 using namespace std;
 5 int MOD=9973;
 6 string s;
 7 int sum[100050];
 8 int quick_pow_mod(int a,int n){
 9     int ans=1;
10     int base=a;
11     while(n!=0){
12         if(n&1){
13             ans=(ans*base)%MOD;
14         }
15         base=(base*base)%MOD;
16         n>>=1;
17     }
18     return ans%MOD;
19 }
20 int main(){
21     int n;
22     while(cin>>n){
23         cin>>s;
24         memset(sum,0,sizeof(sum));
25         sum[0]=1;
26         sum[1]=s[0]-28;
27         for(int i=1;i<s.length();i++){
28             sum[i+1]=(sum[i]*(s[i]-28))%MOD;
29         }
30         while(n--){
31             int x,y;
32             scanf("%d %d",&x,&y);
33             cout<<(sum[y]*quick_pow_mod(sum[x-1],MOD-2))%MOD<<endl;
34         }
35     }
36     return 0;
37 }

 

posted @ 2018-04-11 21:48  ISGuXing  阅读(185)  评论(0编辑  收藏  举报