zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    CF1037H
    CF1296F
    CF1446F
    CF1175G
    CF1146G
    CF1303G
    CF1067D
    CF1477E
    COJ16G
    ZJOI2018 迷宫
  • 原文地址:https://www.cnblogs.com/8023spz/p/9947703.html
Copyright © 2011-2022 走看看