给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input
输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
Output
输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input示例
2 3
Output示例
2
题意:》》》》》
思路:扩展欧几里得算法代入即可,有一篇讲的不错的博客:乘法逆元;
下面附上代码:
#include<bits/stdc++.h>
using namespace std;
int exgcd(int a,int b,int &x,int &y)
{
int d=a;
if(b)
{
d=exgcd(b,a%b,y,x);
y-=(a/b)*x;
}
else
{
x=1;
b=0;
}
return d;
}
int mod_inverse(int a,int m)
{
int x,y;
exgcd(a,m,x,y);
return (m+x%m)%m;
}
int main()
{
int a,m;
cin>>a>>m;
printf("%d\n",mod_inverse(a,m));
return 0;
}

本文介绍了一种通过扩展欧几里得算法求解乘法逆元的方法。具体而言,对于给定的两个数M和N(M<N且两者互质),文章提供了寻找满足特定条件的数K(0<K<N且K*M%N=1)的算法实现。
1512

被折叠的 条评论
为什么被折叠?



