15分求助
查看原帖
15分求助
1118703
xiuman楼主2024/8/27 15:42
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxp 100005
#define maxy 10000005
ll m,q,p;
ll a[25],b[25],fx[maxp][30];
ll log_2[maxy+1];
ll qpow(ll x,ll y){
	ll ans=1;
	x=x%p;
	while(y){
		if(y&1)ans=x*ans%p;
		x=x*x%p;
		y>>=1;
	}
	return ans;
}
ll f(ll x){
	ll ans=0;
	for(int i=1;i<=m;i++){
		ans=ans+a[i]*qpow(x,b[i])%p;
		ans%=p;
	}
	return ans;
}
int main(){
	cin>>m>>q>>p;
	for(int i=1;i<=m;i++){
		cin>>a[i]>>b[i];
	}
	log_2[0]=-1;;
	for(int i=0;i<p;i++){
		fx[i][0]=f(i);
	}
	for(int i=1;i<=maxy;i++){
		log_2[i]=log_2[i>>1]+1;
	}
	for(int j=1;j<=30;j++){
		for(int i=0;i+(1<<j)-1<=p;i++){
			fx[i][j]=fx[fx[i][j-1]][j-1];
		}
	}
	ll x,y,ans;
	for(int i=1;i<=q;i++){
		cin>>x>>y;
		ll l;
		ans=x%p;
		while(y){
			l=log_2[y];
			ans=fx[ans][l];
			y=y-(1<<l);
		}
		cout<<ans<<endl;
	}
	return 0;
}
2024/8/27 15:42
加载中...