zoukankan      html  css  js  c++  java
  • 扩展欧几里得

     1 #define LL long long
     2 int exgcd(LL a,LL b,LL &x,LL &y)/*需要对x和y进行更改,所以要加&*/
     3 {
     4  if(b==0){
     5   x=1;
     6   y=0;
     7   return a;
     8  }
     9  int r=exgcd(b,a%b,x,y);/*递归处理*/
    10  int cnt=x;
    11  x=y;
    12  y=cnt-a/b*y;
    13  return r;
    14 }

     应用于: ax+by = gcd(a, b) ;

    有时题目让求的 x 和 y 并不是ax+by = gcd(a, b) 中的x和y,而是ax'+by' =k中的x和y,例如ax'+by' = 1;这是就要对 x 和 y 进行处理,以x为例:


    令d=gcd(a,b),把ax+by = gcd(a, b) 的两边同时乘 k/d;这样等式就成了ax'+by' = k(其中x'=xk/d,y'=yk/d);进一步转化:ax'-nab/d+by'+nab/d = k (其中的n代表ab/d的个数) ,得到 a(x'-nb/d)+b(y'+na/d) = k .

    那么就可以得出ax'+by' =k的最优解 x' 为    x'%(b/d)  ,即 (x*k/d)%(b/d) ,为了防止结果为负数,可以写成  (x*k/d+b/d)%(b/d)

  • 相关阅读:
    Eclipse关于怎么调出web project
    RMI(远程方法调用)入门
    XSS攻击
    微信小程序
    java——IO流01
    06 python下
    06python上
    05python下
    05python上
    Nginx & Apache_网站用户认证
  • 原文地址:https://www.cnblogs.com/Miroerwf/p/7771202.html
Copyright © 2011-2022 走看看