zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    用户管理
    开机、重启、用户登录注销
    网络请求的封装
    Vuex
    Promise
    Vue Router(二)
    Vue Router(一)
    Vue CLI
    前端模块化-导入导出
    插槽
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7819461.html
Copyright © 2011-2022 走看看