三种方法求解最大公约数
来源:互联网 发布:阿里巴巴软件开发 编辑:程序博客网 时间:2024/06/15 05:33
%greatest common divisor 最大公约数clc;clear;%1.辗转相除法(欧几里得算法):两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。a=250;b=100;c=1;while(c~=0) c=mod(a,b); if(c==0) b else a=b; b=c; endend%2.更相减损术(出自九章算术):两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。% 避免了大整数取模的性能问题a=250;b=100;c=1;while(c~=0) if(a>b) c=a-b; if(c==0) a end a=b; b=c; else c=b-a; if(c==0) a end b=a; a=c; endend%3. 欧几里得算法(辗转相除法)+更相减损术function c= Gcd(a,b)if(a>b) if(mod(a,2)==0&&mod(b,2)==0) c=2*Gcd(a/2,b/2); elseif(mod(a,2)~=0&&mod(b,2)==0) c=Gcd(a,b/2); elseif(mod(a,2)==0&&mod(b,2)~=0) c=Gcd(a/2,b); else c=Gcd(a-b,b); endelseif(a<b) c=Gcd(b,a);else c=a;endend
最后总结一下上述所有解法的时间复杂度:
1.暴力枚举法:时间复杂度是O(min(a, b)))-->(略)
2.辗转相除法:时间复杂度不太好计算,可以近似为O(log(max(a, b))),但是取模运算性能较差。
3.更相减损术:避免了取模运算,但是算法性能不稳定,最坏时间复杂度为O(max(a, b)))
4.更相减损术与移位结合:不但避免了取模运算,而且算法性能稳定,时间复杂度为O(log(max(a, b)))
0 0
- 三种方法求解最大公约数
- 最大公约数三种方法
- 三种方法求最大公约数
- 三种方法求最大公约数
- 三种方法求最大公约数
- C语言三种算法求解最大公约数与最小公倍数
- 最小公倍数和最大公约数求解方法
- 第十二周项目三 用递归方法求解(求出两个数的最大公约数)
- 第十二周项目三 用递归方法求解(3)求两数最大公约数
- 求最大公约数的三种方法
- 求最大公约数(三种方法)
- C++求最大公约数的三种方法
- 三种方法求最大公约数,最小公倍数
- 求最大公约数的三种方法
- 计算最大公约数方法三
- 最大公约数求解
- 最大公约数求解
- 最大公约数求解
- jsoup API 中文版
- 【前端新手之路-第一天】如何实现两个标签页中的通讯?
- HDU_4022_Bombing
- 读深入理解Linux内核 (第8章 内存管理, 第三部分 --- 虚拟内存分配)
- SWIFT JSON
- 三种方法求解最大公约数
- 深入浅出RxJava四-在Android中使用响应式编程
- 二叉树的深度优先与广度优先
- Python-Image基本的图像处理操作
- Java中输入三个数 从小到大打印出来
- Hi SDK软件层次结构
- Fibonacii数列
- 配置Spring管理的bean的作用域
- C语言指针与数组知识点