1.本题能否使用逆元??
2.如果不能,是为何?
3.若果能,我的代码问题出在哪?
#include <iostream>
#define endl "\n"
using namespace std;
long long int d[100025];
long long int fp(long long int x,long long int y,long long p){
long long int ans=1;
while(y>0){
if(y&1){
ans*=x;
ans%=p;
}
x*=x;
x%=p;
y>>=1;
}
return ans;
}
long long int phi(long long int n) {
long long int ans=n;
for(int i=2;i*i<=n;i++){
if (n%i==0) {
ans=ans/i*(i-1);
while(n%i==0){
n/=i;
}
}
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long int t;
cin>>t;
while(t--){
long long int q,M;
cin>>q>>M;
long long int x=1;
long long int rgw=phi(M)-1;
for(int i=1;i<=q;i++){
long long int op,m;
cin>>op>>m;
if(op==1){
m%=M;
d[i]=m;
x*=m;
x%=M;
cout<<x<<endl;
}
else{
if(x%d[m]==0){
x/=d[m];
x%=M;
cout<<x<<endl;
}
else{
x*=fp(d[m],rgw,M);
x%=M;
cout<<x<<endl;
}
}
}
}
return 0;
}
谢谢各位 大佬 .