给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
输入
输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
输出
输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
输入样例
2 3
输出样例
2
扩展欧几里得求乘法逆元,给出m,n,实际上就是求m*x+n*y=1的解,x就是答案。整体对n取模。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int exgcd(int a,int b,int &x,int &y) { if(b == 0) { x = 1; y = 0; return a; } int r = exgcd(b,a % b,x,y); int t = x - a / b * y; x = y; y = t; return r; } int main() { int m,n,x,y; cin>>m>>n; exgcd(m,n,x,y); x = ((x % n) + n) % n; cout<<x<<endl; }