zoukankan      html  css  js  c++  java
  • gcd与exgcd

    gcd:

    整型求法

     int gcd(int x,int y) { return b?gcd(b,a%b):a; } 

    浮点型求法

    1 double gcd(double a,double b)  
    2 {  
    3     return a < eqs ? b : gcd(fmod(b,a),a);  
    4 }

     exgcd(摘自:戳这里):

     1 typedef long long LL;
     2 
     3 LL exgcd(LL a,LL b,LL &x,LL &y){
     4 
     5      if(a==0&&b==0) return -1;
     6 
     7      if(b==0) { x=1;y=0; return a;  }
     8 
     9      LL d=exgcd(b,a%b,y,x);
    10 
    11      y-=a/b*x;
    12 
    13      return d;
    14 
    15 }
    16 
    17 LL MLE(LL a,LL b,LL mod){  // 返回(a*x)%mod=b 的最小正整数解
    18 
    19     LL x,y;
    20 
    21     LL gcd=exgcd(a,mod,x,y);
    22 
    23     if(b%gcd!=0) return -1;  //若返回-1,则该方程无解
    24 
    25     x*=b/gcd;
    26 
    27     mod/=gcd;
    28 
    29     if(mod<0) mod=-mod;
    30 
    31     LL ans=x%mod;
    32 
    33     if(ans<=0) ans+=mod;  //其他解为: ans+i*mod (i为整数)
    34 
    35     return ans;
    36 
    37 }
    38 
    39 LL x0,y0,kx,ky;
    40 
    41 bool LE(LL a,LL b,LL c){   //解线性方程ax+by=c
    42 
    43     LL x1,y1;
    44 
    45     LL gcd=exgcd(a,b,x1,y1);
    46 
    47     if(c%gcd)return false;  //无整数解
    48 
    49     x0=x1*c/gcd,y0=y1*c/gcd;
    50 
    51     kx=b/gcd,ky=-a/gcd;
    52 
    53     return true;   //有解,解集为:(x0+kx*t,y0-ky*t) t为整数
    54 
    55 }
    View Code
  • 相关阅读:
    阅读文献总结笔记11
    阅读文献总结笔记20
    阅读文献总结笔记13
    阅读文献总结笔记19
    阅读文献总结笔记17
    阅读文献总结笔记18
    阅读文献总结笔记15
    java图片以字符串的形式传输
    java与C#对接签名和验签
    SIP代码大全
  • 原文地址:https://www.cnblogs.com/zmin/p/7622116.html
Copyright © 2011-2022 走看看