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