zoukankan      html  css  js  c++  java
  • 【ZOJ 3609】Modular Inverse 最小乘法逆元

    The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1x (mod m). This is equivalent to ax≡1 (mod m).

    Input

    There are multiple test cases. The first line of input is an integer T ≈ 2000 indicating the number of test cases.

    Each test case contains two integers 0 < a ≤ 1000 and 0 < m ≤ 1000.

    Output

    For each test case, output the smallest positive x. If such x doesn't exist, output "Not Exist".

    Sample Input

    3
    3 11
    4 12
    5 13
    

    Sample Output

    4
    Not Exist
    8

    题解:
    最小乘法逆元:由ax≡1 (mod m)得:转化为解线性方程ax+by=1
    需要注意的地方:最小解取模时不能写成(x%t+t)%t 因为此题要的是正数解 这样写有时会输出0

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 typedef long long ll;
     8 ll exgcd(ll a,ll b,ll &x,ll &y)
     9 {
    10     if(!b)
    11     {
    12         x=1;y=0;
    13         return a;
    14     }
    15     ll r=exgcd(b,a%b,x,y);
    16     ll t=x;
    17     x=y;
    18     y=t-a/b*y;
    19     return r;
    20 }
    21 void work(ll a,ll b,ll c)
    22 {
    23     ll x,y;
    24     ll r=exgcd(a,b,x,y);
    25     if(c%r!=0){
    26         printf("Not Exist
    ");
    27         return ;
    28     }
    29     x*=c/r;
    30     ll t=b/r;
    31     if(t<0)t=-t;
    32     x%=t;
    33     if(x<=0)x+=t;
    34     printf("%lld
    ",x);
    35 }
    36 int main()
    37 {
    38     int T;
    39     ll a,b;
    40     scanf("%d",&T);
    41     while(T--){
    42         scanf("%lld%lld",&a,&b);
    43         work(a,b,1);
    44     }
    45     return 0;
    46 } 
    
    
    
     
  • 相关阅读:
    2017第17周四当前工作中困境与挑战思考
    2017第17周三
    2017第17周二
    最小可行产品
    《穷查理宝典》中三条最重要的学习方法
    机场打车有感
    2017第15周五
    2017第15周四
    三条经济学原理帮你做出正确的选择
    Mac通过安装Go2Shell实现“在当前目录打开iTerm2”
  • 原文地址:https://www.cnblogs.com/Yuzao/p/7029396.html
Copyright © 2011-2022 走看看