51nod 1256 乘法逆元

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

猜你喜欢

转载自www.cnblogs.com/8023spz/p/9947703.html
今日推荐