求助,关于 逆元
查看原帖
求助,关于 逆元
734049
__Cby___楼主2024/1/24 18:06

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;
}

谢谢各位 大佬 .

2024/1/24 18:06
加载中...