这里提供两种方法:一种比较朴素,基本思想很简单就是按照从大到小的找能够匹配的因数,找到就返回;另一种是欧几里得算法,该算法的核心思想是,当前两个数的最大公因数的也是这两个数模的与其中一个元素的的最大公因数,然后递归算出。当两个数的模等于0时,则找到了最大公因数。

第一种:朴素的算法

算法思想:基本思想很简单就是按照从大到小的找能够匹配的因数,找到就返回;

时间复杂度:O(n)

代码(Java实现):

 1 package Gcd;
 2 /*
 3  * 求两个数的最大公因数的朴素算法。
 4  */
 5 public class gcd1 {
 6     public static int gcd_find(int a,int b){
 7         //先找一个数的当前最大因数,当前因数是否是另一个数的因数,如果是则返回,否则找下一个较小的因数,直到找到为止
 8         if(b%a==0)
 9             return a;
10         int nowMaxGid=a/2;
11         for(int i=nowMaxGid;i>=1;i--){
12             if(a%i==0&&b%i==0){
13                 return i;
14             }
15         }
16         return 1;
17     }
18     public static void main(String[] args) {
19         System.out.println(gcd_find(88,1000));
20     }
21
22 }

红色标记的是核心代码。

第二种:欧几里得算法

算法思想:该算法的核心思想是,当前两个数的最大公因数的也是这两个数模的与其中一个较小的元素的的最大公因数,然后递除算出。当两个数的模等于0时,则找到了最大公因数。

时间复杂度:O(logn)

代码(Java实现):

 1 package Gcd;
 2 /*
 3  * 求出两个数的最大公因数(欧几里得算法)
 4  */
 5 public class gcd2 {
 6
 7     public static int gcd_find(int a,int b){
 8
 9         while(b!=0){
10             int mark=a%b;
11             a=b;
12             b=mark;
13         }
14         return a;
15     }
16     public static void main(String[] args) {
17         System.out.println(gcd_find(10,8));
18     }
19 }

通过两种方法的对比,欧几里得算法计算时间特别快,而朴素算法则差很多,特别当数很大的时候,更是需要花费更多时间。

转载于:https://www.cnblogs.com/xiaotiaosi/p/6890988.html

求两个数的最大公因数相关推荐

  1. python求两数最大公因数_使用辗转相除法求两个数的最大公因数(python实现)

    数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除a,记做b|a. 性质1:如果c|a,c|b,且对于任意的整数m,n,则有c| ...

  2. python辗转相除_使用辗转相除法求两个数的最大公因数(python实现)

    数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除a,记做b|a. 性质1:如果c|a,c|b,且对于任意的整数m,n,则有c| ...

  3. 【Java常用方法】求两个数的最大公因数、最小公倍数,两数是否互质

    最大公因数 最好的办法就是gcd辗转相除法.有两种方式,一种是迭代,一种是递归. //迭代版本 int gcd(int a,int b){while(b!=0){int r=b;b=a%b;a=r;} ...

  4. 练习题007:求两个数的最大公因数和最小公倍数

    C语言练习题目录索引 最大公约数:辗转相除法: 最小公倍数=两数之积 / 两者的最大公约数. #include <stdio.h> #include <windows.h>in ...

  5. 三种方法求两个数最大公因数

    1.题目描述: 求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整数 ...

  6. 求N个数的最大公因数(算法)

    在一般的程序设计书里面,都有关于求两个数的最大公因数的算法(或者叫做最大公约数).求两个数的最大公约数算法用的最多的是辗转相除法. 基本思路就是 getCommonMutiple(a,b){  //这 ...

  7. Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM)

    Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM) 最大公因数 1. 列表排序 2. 将列表分为两部分 3. 求最大公因数的质因子 4. 得到结果 5. 完整程序 最小公倍数 另 ...

  8. python求两数最大公因数_Python求两个数的最大公约数

    Python求两个数的最大公约数 一.求最大公约数算法: 1. 整数A对整数B进行取整, 余数用整数C来表示 举例: C = A % B 2. 如果C等于0,则C就是整数A和整数B的最大公约数 3. ...

  9. 程序员数学基础【四、取模应用-判断奇偶数、判断素数、求两个数的最大公约数、水仙花数】(Python版本)

    测试使用语言:[Python] 由于此类语言入门非常容易,哪怕初中生亦可以,并且本科/研究生写论文.做实验多数所用语言都是[Python]故而选择此语言. 代码运行平台:[win10 x64] 代码环 ...

最新文章

  1. 1.1 对象的概念及面向对象的三个基本特征
  2. 网络攻防第十一周作业
  3. c/c++面试试题(三)
  4. CSS中height:100%和height:inherit的异同
  5. php订阅与推送,PHP用户关键词订阅推送文章功能
  6. 正则表达式 转义字符(转)
  7. 演示JSP注释的使用
  8. mysql base dir_install_mysql57.sh
  9. Linux 宏定义之 offsetof 与 container_of(十九)
  10. 【论文研读】基于对偶种群的约束多目标优化进化算法
  11. JAVA调用数据泵,oracle数据泵导入导出dmp文件语法
  12. iOS 仿YY直播心形动画 烟花动画
  13. OO 之美:设计的分寸
  14. 【frp】使用 frp 实现内网穿透(CentOS 云服务器 + Win10)
  15. 大型网站的监控、报警与故障转移
  16. 把大象装冰箱,需要分几步?- - -迅雷产品经理笔试、面试回顾
  17. 电脑无法连接oppo手机热点
  18. 删除我的电脑中的百度云管家图标
  19. 基于51单片机的蓝牙台灯
  20. 计算机培训简报膜报,信息技术培训简报

热门文章

  1. 计算机连上网没网络连接,电脑显示本地网络连接但是宽带没连上怎么办? 爱问知识人...
  2. 关于input type=“text”文本框的 默认宽度
  3. 公司--保存时验证数据是否保存重复
  4. acu风格是什么意思_“高街风格”是什么意思?
  5. 2020年智能车竞赛由预赛赛道拼接成决赛赛道的方案
  6. 内网虚拟服务器怎么固定域名,如何让自己的局域网用(虚拟的)域名访问?
  7. 计算机专业认证协会,我校计算机科学与技术专业接受教育部中国工程教育专业认证协会专家组现场考查...
  8. GPIO代码使用流程(伪代码部分示例)
  9. 分段函数是不是一定初等函数_查漏补缺问题64:一个含多参数分段函数的连续性与可导性讨论...
  10. python rpc 性能比较_Python与RPC -- (转)