zoukankan      html  css  js  c++  java
  • 51nod--1256 乘法逆元 (扩展欧几里得)

    题目:

    1256 乘法逆元
    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注
    给出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

    分析:

    对于 K * M % N = 1, 其实这个式子是可以化为 K * M - T * N = 1;
    这就和 a * x + b * y + c = 0 一样的, 又因题目讲明 gcd (M , N) = 1;
    所以可以直接上扩展欧几里得了, 得出的 K 可能是负数, 要注意处理一下。

    实现:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    typedef unsigned long long ULL;
    
    void Exgcd(LL a, LL b, LL& d, LL&x, LL& y) { ///扩展欧几里得
        if(b == 0) { d = a, x = 1, y = 0; }
        else { Exgcd(b, a%b, d, y, x), y -= x * (a/b); }
    }
    
    LL K, N, M, D, T;
    
    int main() {
        while(cin >> M >> N) {
            Exgcd(M,N,D,K,T);
            if(K < 0) K = ((-K)/N + 1) * N + K;
            cout << K << endl;
        }
    }
    
  • 相关阅读:
    sqlsever2008及以上各个安装包的说明
    解决 windows2012 下无法安装 sql2008R2
    dapper extensions (predicates)
    Dapper full example
    Dapper.ColumnMapper 的使用
    wms
    大端格式 与 小端格式
    mysql数据库引擎
    事务
    MySQL索引底层实现
  • 原文地址:https://www.cnblogs.com/aoxuets/p/5506846.html
Copyright © 2011-2022 走看看