• 51Nod 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

    思路:

    因为N与M互质,gcd(N,M)=1
    所以 K*M%N=1 改写为

    即 

    转化为求exgcd
    解出大于0的最小正值即可

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 ll exgcd(ll a, ll b, ll &x, ll &y) {
     5     if(!b) {
     6         x=1;y=0;return a;
     7     }
     8     ll ans=exgcd(b,a%b,x,y);
     9     ll temp=x;
    10     x=y;
    11     y=temp-a/b*y;
    12     return ans;
    13 }
    14 int main() {
    15     ios::sync_with_stdio(false);
    16     ll m,n;
    17     cin>>m>>n;
    18     ll x,y;
    19     exgcd(m,n,x,y);
    20     cout<<((x%n)+n)%n<<endl;
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    Python3 运算符
    Python之匿名函数
    Python之推导式、生成器表达式
    Python网络编程
    Python单例模式
    Python异常处理及元类
    Python面向对象(三)
    Python面向对象(二)
    Python面向对象(一)
    Python面向对象入门
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7819461.html
Copyright © 2020-2023  润新知