题目链接:传送门
给出N,M,求出最小K使得K*M%N=1
这是一道扩欧的模板题,第一次膜
扩欧是 已知n,m求一组a,b使得n*a+m*b=gcd(n,m)
因为题目给出N,M互质即gcd(N,M)=1
公式化简恰好为 k*m-x*M=1
扩欧和乘法逆元的小结有个大牛的blog传送门
代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int exgcd(int a,int b,int &x,int &y){
int d=a;
if(b!=0){
d=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-(a/b)*y;
}
else {
x=1;
y=0;
}
return d;
}
int main(){
int i,j,n,m,k,x,y;
cin>>m>>n;
exgcd(m,n,x,y);
while(x<0){
x+=n;
}
cout<<x<<endl;
return 0;
}