有道题代码有问题
  • 板块灌水区
  • 楼主sunhang601602
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/12/19 22:42
  • 上次更新2023/11/5 05:54:28
查看原帖
有道题代码有问题
348080
sunhang601602楼主2020/12/19 22:42

已知正整数a和m,若ax mod m为1,则在模m意义下,称x为a的乘法逆元。例如2*3 mod 5为1,则在模5意义下2和3互为乘法逆元。当然在有些情况下不存在乘法逆元,例如模6意义下不存在2的乘法逆元,因为2乘以任何正整数再模6都不可能得到1。对于若干组a和m,求出模m意义下a的乘法逆元。若不存在就用0代替。

输入:输入第一行为正整数T代表共有T组数据,每组数据占一行共2个正整数a和m。T<=1000, 1<=a<=m<=1000000。

样例: 3 4 5 3 7 8 2

输出:4 5 0

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll &x,ll &y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	ll xp,yp;
	ll g=exgcd(b,a%b,xp,yp);
	x=yp;
	y=xp-a/b*yp;
	return g;
}
ll inverse(ll a,ll MOD){
	ll x,y;
	ll g=exgcd(a,MOD,x,y);
	if(g==1)return (x%MOD+MOD)%MOD;
	cout<<0<<endl;
	return -1;
}
int main(){
   ll T;
    cin>>T;
    while(T--){
    ll a1,m;
    	cin>>a1>>m;
    	inverse(a1,m);
	}
    return 0; 
}
2020/12/19 22:42
加载中...