关于欧几里得算法的根本性原理以及三种实现方法,以及各种算法实现的差异。

    技术2025-05-04  17

    关于欧几里得算法的根本性原理以及三种实现方法。

    1.欧几里得算法的文字性描述: 通过大数除以小数取余,再将余数作为除数,俩个数字中较小的数(原来的除数)作为被除数,再而进行取余,这样直到余数为零,所得除数为俩个数的最大公约数 。根据欧几里得算法的另一个名称“辗转相除法”中“辗转”指的是有数据交换(传输),这指的是只能用大数去除以小数以及数据的传递,所以当有小数去除以大数时,要交换俩个数的位置,当进行下一次取余运算时要交换除数,被除数的值。“相除”指的是该算法只涉及算数运算中的除法。 2.欧几里得算法的根本性原理: 首先理解“取余”的思想,取余是为了将俩个数字中公共数字或者公共数字的最大倍数剔除(例:24和18的第一次取余将18剔除,27和12的第一次取余将24剔除),其次理解“余数”的作用,余数是为了拉近俩个数的差值,并对取余循环进行一个终止(例:18和6的差值为0,27和55的差值为1)每次都会缩小俩个数(余数和除数)之间的差值(余数),一次次缩小差值后直到所得的俩个数字的差值(余数)为零。这时候的除数为俩个数的最大公约数。 3.欧几里得递归算法: void swap(int &a,int &b) //“&”引用,形参改变实参也会改变 { int c; c=a;a=b;b=c; } int rgcd(int m,int n) { if(m=0) return n; return rgcd(n%m,m); “递归函数”,函数直接或间接地调用自身 } int gcd(int m,int n) { if(m>n) swap(m,n); returrn rgcd(m,n) } 4.欧几里得迭代算法: int gcd(int m,int n) if(m=0) return n; if(n=0) return m; if(m>n) swap(m,n); while(m>0) while“当型循环” { int c=n%m;n=m;m=c; return n; } 5.欧几里得穷举算法: int gcd(int m,int n) { int t; if(m=0) return n; if(n=0) return m; int t=m>n?n:m; “取小运算” while(m%t||n%t)t - -; “穷举思想” return t; } 6.关于欧几里得穷举算法的拓展(可求俩个数的最小公倍数) int gcd(int m,int n) { int t; if(m=0) return n; if(n=0) return m; int t=m>n?m:n; “取大运算” while(t%m||t%m)t ++; "穷举思想“ return t; }

    Processed: 0.011, SQL: 9