写作网站投稿平台,网页设计资料的网站,建设银行网银盾官方网站下载,江门网站快速排名题目链接 
分析 
首先这题给了很大的提示信息 注意 m 和 p 的范围 , 很自然的想到可以先把所有可能的  f ( x ) f(x) f(x) 算出来. 
思维误区 
有些人在算完  f ( x ) f(x) f(x) 之后可能就会去思考找环的问题#xff0c;然后一些码力弱的大佬就会祭掉. 
在经过仔细的观察之后…题目链接 
分析 
首先这题给了很大的提示信息 注意 m 和 p 的范围 , 很自然的想到可以先把所有可能的  f ( x ) f(x) f(x) 算出来. 
思维误区 
有些人在算完  f ( x ) f(x) f(x) 之后可能就会去思考找环的问题然后一些码力弱的大佬就会祭掉. 
在经过仔细的观察之后 (大多数人其实一眼就看出来了罢 , 可以发现最终答案的计算是符合结合律的或者说具有传递性 所以考虑倍增. 
令  f a [ i ] [ j ] fa[i][j] fa[i][j] 表示  f 1   j ( i ) f_{1j}(i) f1j(i) 的值初始时把  f [ i ] [ 0 ] f[i][0] f[i][0] 算出来后面就可以直接倍增了. 
Code 
#include bits/stdc.h
#define int long long
const int N  1e510;using namespace std;
int m,q,p;
int ksm(int a, int b){int ans  1;while(b){if(b1){ans  ans * a % p;}a  a*a%p;b  1;}return ans;
}
int a[30],b[30];
int f[N];
int get(int x){int ans  0;for(int i  1; i  m; i){ans  (ans  a[i]*ksm(x,b[i])%p) % p;}return ans;
}
bool vis[N];
int belong[N];
vectorint e[N];
int fa[N][30]; 
void init(){for(int i  0; i  p; i){fa[i][0]  get(i);}for(int i  1;i  25; i){for(int j  0; j  p; j){fa[j][i]  fa[fa[j][i-1]][i-1];}}
}
signed main(){cin  m  q  p;for(int i  1; i m; i){cin  a[i]  b[i];a[i] % p;} init();while(q--){int x,y;cin  x  y;x % p;for(int i  25; i  0; i--){if((1  i)  y) x  fa[x][i],y - (1i);}cout  x  endl;}return 0;
}