zoukankan      html  css  js  c++  java
  • 扩展欧几里得算法+获取特殊的解

    通过扩展欧几里得算法获取x或者y的最小整数解

    template<class T> void exgcd(T a,T b,T &d,T &x,T &y){
        if(!b) {d=a;x=1;y=0;}
        else {exgcd(b,a%b,d,y,x);y-=x*(a/b);}
    }
    //求解二元一次方程 a*x+b*y=c,一组解为x,y,无解则返回false
    template<class T> bool Solve_equation(T a,T b,T c,T &x, T& y){
        T gcd;
        exgcd(a,b,gcd,x,y);
        if(c%gcd) return false;   //无解
        T k=c/gcd;
        x*=k;y*=k; 
        T xplus=b/gcd,yplus=a/gcd;  
        if(xplus<0) xplus*=-1;if(yplus<0) yplus*=-1;
        //此时求出的x,y即为一组解,该方程的通解形式为X=x+t*(b/gcd),Y=y-t*(a/gcd) t为任意正整数
        //根据题目要求我们需要构造特殊解
        //x=(x%xplus+xplus)%xplus;y=c-a*x; //x的最小正整数解
        //y=(y%yplus+yplus)%yplus;x=c-b*y; //y的最小正整数解
        return true;
    }
  • 相关阅读:
    关于 Vue
    HTTP 知识点
    JS 的一些原生属性
    JS知识点-2 通信类
    原生JS知识点
    CSS知识点
    HTML知识点
    关于在Ajax中使用pushstate
    JavaScript 中的 This
    观察者模式
  • 原文地址:https://www.cnblogs.com/033000-/p/10040183.html
Copyright © 2011-2022 走看看