算法.数学.初级.求最大公约数--辗转相除法,powerbuilder powerscript实现
2007-03-12 17:07
531 查看
因为powerScript语法为我最熟悉的,所以选择用它实现。其它语言的语法大家可自行转换,不好意思.
下面是函数内容:
对于此算法的优劣及修正方案需要大家积极的评论!
下面是函数内容:
//==================================================================== // Function: nvo_arith_math::of_gcd() //-------------------------------------------------------------------- // Description: 求最大公约数(greatest common divisor)的"辗转相除法" // (给出两个数,将大数除以小数,用所得余数替换大数,继续用这两个 // 数中大者除以小者,用所得余数替换较大者,继续下去,直到所得余数为 // 0,此时除数即为所求的最大公约数。 // 下面是一个实例:(15, 21) = (15, 6) = (3, 6) = (3, 0) = 3) //-------------------------------------------------------------------- // Arguments: // readonly longlong all_num[] 待比较的数 //-------------------------------------------------------------------- // Returns: longlong //-------------------------------------------------------------------- // Author: renwanly Date: 2007.03.12 //-------------------------------------------------------------------- // Modify History: // //==================================================================== longlong lll_num[],lll_mod UnsignedInteger lui_cnt,i lui_cnt = UpperBound(all_num[]) CHOOSE CASE lui_cnt CASE 2 //只有两个数,核心比较算法 IF all_num[1] >= all_num[2] THEN lll_mod = Mod(all_num[1],all_num[2]) IF lll_mod = 0 THEN RETURN all_num[2] ELSE RETURN of_gcd({all_num[2],lll_mod}) END IF ELSE lll_mod = Mod(all_num[2],all_num[1]) IF lll_mod = 0 THEN RETURN all_num[1] ELSE RETURN of_gcd({all_num[1],lll_mod}) END IF END IF CASE 0,1 //如果没有数或只有1个数,则错误 RETURN 0 CASE ELSE //有多个数,递归调用此方法 FOR i = 1 To Truncate(lui_cnt/2,0) lll_num[i] = of_gcd({all_num[i*2 - 1],all_num[i*2]}) NEXT IF Mod(lui_cnt,2) = 1 THEN lll_num[UpperBound(lll_num[])+1] = all_num[lui_cnt] RETURN of_gcd( lll_num[]) END CHOOSE |
相关文章推荐
- 算法.数学.初级.求最小公倍数--(利用最大公约数的辗转相除法),powerbuilder powerscript实现
- 世界上最早的算法:辗转相除法(求两个自然数最大公约数) 推荐
- C语言之linux内核实现最大公约数算法
- 求两个整数的最大公约数的各种算法(C语言实现)
- java实现最大公约数和最小公倍数(每天一道算法题)
- 用三种算法实现最大公约数(附两种算法算最小公倍数)
- c语言经典题算法1--用辗转相除法求两个数的最大公约数
- 世界上最早的算法:辗转相除法(求两个自然数最大公约数)
- Java实现算法导论中最大公约数欧几里得算法
- c语言用辗转相除法实现求最大公约数
- 三种算法求最大公约数——Java实现
- 201708310807_《算法-Javascript实现最大公约数》
- 数学算法:求两个数的最大公约数
- 算法之 求两个数的最大公约数 C++实现
- 实用算法实现-第 25 篇 最大公约数
- C语言 求两个数的最大公约数 (算法)--辗转相减法、辗转相除法
- 实用算法实现-第 25 篇 最大公约数
- 辗转相除法原理实现最大公约数的求解
- 算法实现求两个整数的最大公约数!
- 辗转相除法原理实现最大公约数的求解