扩展Gcd含义及用途
来源:互联网 发布:tensorflow vgg 微调 编辑:程序博客网 时间:2024/06/07 22:52
扩展Gcd的用途:举个样例,一个人一次走 3步 或 5步 求他到 15步的所有方案:Gcd(3,5) = a*3 + b*5
还比如:Poj的青蛙约会
公式:a*x+b*y = Gcd(a,b) = Gcd(b,a%b) = b*x+(a%b)*y = b*x+(a-a/b*b)*y = b*x+a*y-b*a/b*y = a*y+b*(x-a/b*y)根据上面的公式 我们可以得到:x = y1 ; y = x1-a/b*y1 所以 在每次递归后 都要进行 如上式转换。而要注意的是:此递归的过程是 先一直执行上半步骤,深入最后,到达递归的出口 然后返回上一层 执行下半步骤 执行之后,返回值再返回上一层,执行下一步骤,再返回上一层,一直到返回到第一层为止 此过程 就相当于 一条路 一直靠右 走到尽头,然后再回头 靠左返回原点
怎么说呢,递归嘛,本来就不是人理解的东西,所以把问题想简单,先是 普通Gcd 再进行公式交换 ,简单点想 Exgcd不就是这样嘛
代码如下:
*/
#include<bits/stdc++.h>int x,y;int ExGcd(int n,int m){ if(m==0){//出口条件 x=1;y=0;// n*1+m*0 == Gcd(n,0) 所以出口条件的 x 为 1 y 为 0 return n; } int Gcd=ExGcd(m,n%m);//注意 一定要有变量 接收 Gcd int temp=x;//交换 公式关系 x=y; y=temp-n/m*y; return Gcd; }int main(){ int N,M; scanf("%d %d",&N,&M); int D=ExGcd(N,M); printf("x = %d y = %d Gcd(%d,%d) = %d\n",x,y,N,M,D); return 0;}
0 0
- 扩展Gcd含义及用途
- gcd及扩展gcd
- string::npos 含义及用途
- 欧几里得-GCD及扩展
- 3314 扩展gcd 及 扩展gcd的原理
- js中闭包与原型链的含义及用途
- StrConv 函数的vbUnicode和vbFromUnicode含义及用途
- java中volatile关键字的含义解析及用途
- js中闭包与原型链的含义及用途
- 【扩展GCD】
- 扩展GCD
- 扩展GCD
- 扩展gcd
- 扩展gcd
- 扩展gcd
- GCD,快速GCD,扩展GCD
- gcd与扩展gcd
- gcd,扩展gcd
- centos 安装nginx
- 机器学习(周志华)习题解答-线性模型(3.1-3.10)
- 【计算机视觉】人脸识别的步骤
- EAGLE 电路板编辑器中的“层”概念
- 接口和抽象类的区别
- 扩展Gcd含义及用途
- leecode 解题总结:374. Guess Number Higher or Lower
- android框架Xutils
- stack,deque,queue对比
- CSS3 媒介查询
- Python彻底解决采集网页乱码问题
- java守护线程和非守护线程
- 机器学习(周志华)习题解答-决策树(4.1-4.10)
- 【HDU 1597】find the nth digit(模拟)